Frage

In die Vollen .NET framework können Sie die Farbe.FromArgb () - Methode erstellen Sie eine neue Farbe mit alpha-blending, wie diese:

Color blended = Color.FromArgb(alpha, color);

oder

Color blended = Color.FromArgb(alpha, red, green , blue);

Aber in der Compact-Framework (2.0 speziell), keiner dieser Methoden zur Verfügung stehen, erhalten Sie nur:

Color.FromArgb(int red, int green, int blue);

und

Color.FromArgb(int val);

Die erste, natürlich, nicht einmal lassen Sie geben Sie einen Alphawert ein, aber die Dokumentation für die letztere zeigt, dass "val" ist eine 32-bit-ARGB-Wert (wie 0xAARRGGBB im Gegensatz zu den standard-24bit 0xRRGGBB), also würde es Sinn machen, dass man nur bauen, den ARGB-Wert und übergeben Sie an die Funktion.Ich habe versucht, dies mit dem folgenden:

private Color FromARGB(byte alpha, byte red, byte green, byte blue)
{
    int val = (alpha << 24) | (red << 16) | (green << 8) | blue;
    return Color.FromArgb(val);
}

Aber egal was ich mache, das alpha-blending nie funktioniert, resultiert daraus die Farbe immer als volle Deckkraft, auch bei der Einstellung der alpha-Wert auf 0.

Hat jemand bekommen dies funktioniert auf dem Compact Framework?

War es hilfreich?

Lösung

Offenbar, es ist nicht ganz so einfach, aber noch möglich, wenn Sie Windows Mobile 5.0 oder neuer.

Andere Tipps

Anscheinend, ist es nicht ganz so einfach, aber dennoch möglich, wenn man mit Windows Mobile 5.0 oder neuer.

Wow...definitiv nicht Wert, wenn ich all diesen code in (und tun native interop!) Gut zu wissen aber, danke für den link.

Es ist ein codeplex-Website aus, dass es scheint zu tun, die schweres heben von com-interop für Sie:

ich habe diesen code und füge ich diesem

device.RenderState.AlphaBlendEnable = true;
device.RenderState.AlphaFunction = Compare.Greater;
device.RenderState.AlphaTestEnable = true;
device.RenderState.DestinationBlend = Blend.InvSourceAlpha;
device.RenderState.SourceBlend = Blend.SourceAlpha;
device.RenderState.DiffuseMaterialSource = ColorSource.Material;

in der routine initialisiert und es funktioniert sehr gut, danke

CE 6.0 nicht Unterstützung für alpha-blending.WM 5.0 und oben, aber nicht über das .NET CF, müssen Sie die P/Invoke-GDI-Zeug zu tun.Gibt es fertige Lösungen gibt, aber wenn Sie interessiert sind, ich kann Graben, der links von morgen im Büro.Ich habe die Arbeit mit CE 6.0 aktuell, so dass ich nicht auf meinen Verstand.

Wenn Sie sind mit dem CE 6.0, die Sie verwenden können, pseudo-Transparenz durch Bildung einer Transparenz der Hintergrundfarbe (z.B.ff00ff oder etwas ähnlich hässliches) und die Verwendung dieser in Ihren Bildern für die transparenten Bereiche.Dann, Ihre übergeordneten Steuerungen implementieren muss, um eine einfache Schnittstelle, dass ermöglicht die re-Zeichnung der betroffene Teil auf Ihre Tochter controls Grafik-Puffer.Beachten Sie, dass nicht geben Sie eine echte "alpha-Kanal", sondern nur ein hard-on-off-binary Art der Transparenz.

Es ist nicht so schlimm, wie es klingt.Werfen Sie einen Blick auf die OpenNETCF ImageButton für den Anfang.Wenn Sie diese Methode verwenden, habe ich eine etwas erweiterte version einige einfache Steuerelemente, die mit dieser Technik herumliegen, wenn Sie interessiert sind.

Ein weitere Nachteil ist, dass diese Technik beruht auf der übergeordneten Steuerung die Implementierung eines speziellen interface, und die Tochter-Steuerelemente verwenden es in der Zeichnung.So mit closed-source-Komponenten (d.h.auch die Aktie winforms-Komponenten), Sie sind aus Glück heraus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top