Domanda

Nel Pieno .NET framework è possibile utilizzare il Colore.FromArgb() metodo per creare un nuovo colore con alpha blending, come questo:

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

o

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

Tuttavia il Compact Framework (2.0 in particolare), nessuno di questi metodi sono disponibili, si ottiene:

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

e

Color.FromArgb(int val);

Il primo, ovviamente, non consente di immettere un valore alfa, ma la documentazione per l'ultima mostra che "val" è un 32bit valore ARGB (come 0xAARRGGBB invece che i normali 24bit 0xRRGGBB), quindi non avrebbe senso che si potessero costruire il valore ARGB e passare alla funzione.Ho provato con il seguente:

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

Ma non importa quello che faccio, l'alpha blending non funziona mai, il colore risultante è sempre così pieno di opacità, anche quando si imposta il valore di alpha a 0.

Qualcuno ha ottenuto questo lavoro il Compact Framework?

È stato utile?

Soluzione

A quanto pare, non è molto semplice, ma ancora possibile, se si dispone di Windows Mobile 5.0 o più recente.

Altri suggerimenti

A quanto pare, non è molto semplice, ma ancora possibile, se si Windows Mobile 5.0 o più recente.

Wow...sicuramente non vale la pena se devo mettere tutto il codice (e non l'interoperabilità nativa!) Buono a sapersi anche se, grazie per il link.

C'è un sito codeplex là fuori che sembra fare il sollevamento di carichi pesanti di interoperabilità com per voi:

prendo questo codice e lo aggiungo

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;

nella routine di inizializzazione e funziona molto bene, grazie

CE 6.0 non supporta l'alpha blending.WM 5.0 e sopra, ma non attraverso l' .NET CF, avrete bisogno di P/Invoke GDI roba per farlo.Ci sono soluzioni là fuori, tuttavia, se siete interessati posso scavare i link in uscita domani in ufficio.Devo lavorare con CE 6.0 attualmente, quindi non ho la mente.

Se si utilizza CE 6.0, è possibile utilizzare pseudo-trasparenza, riservando una trasparenza del colore di sfondo (ad es.ff00ff o qualcosa di similmente brutto) e di utilizzare le immagini per le aree trasparenti.Quindi, il genitore controlli devono implementare una semplice interfaccia che permette di ri-disegnare la parte più importante di tua figlia controlli grafica di buffer.Nota che questo non è un vero e proprio "canale alfa", ma solo un disco su binari tipo di trasparenza.

Non è così male come sembra.Date un'occhiata al OpenNETCF ImageButton per cominciare.Se avete intenzione di utilizzare questo metodo, ho un po ' la versione estesa di alcuni semplici controlli con questa tecnica giro, se siete interessati.

Un ulteriore svantaggio è che questa tecnica si basa sul controllo parentale e l'implementazione di un'apposita interfaccia, e la figlia controlli utilizzando in disegno.Così chiuse componenti di origine (es.il magazzino, i componenti di windows form) siete fuori di fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top