Domanda

Alcuni mesi fa ho creato alcuni esempi online come questo di Jeff Prosise che utilizzano la classe WriteableBitmap in Silverlight.

Rivisitandoli oggi con l'ultimo programma di installazione Silverlight3 (3.0.40624.0), l'API sembra essere cambiata.

Ho capito alcuni cambiamenti.Ad esempio, la funzione di accesso all'array WriteableBitmap è scomparsa, ma l'ho trovata nella nuova proprietà Pixels, quindi invece di scrivere:

 bmp[x]

posso scrivere

bmp.Pixels[x]

Esistono semplici sostituzioni simili per queste chiamate o il modello di utilizzo stesso è cambiato?

bmp = new WriteableBitmap(width, height, PixelFormats.Bgr32);
bmp.Lock();
bmp.Unlock();

Qualcuno può indicarmi un esempio funzionante utilizzando l'API aggiornata?

È stato utile?

Soluzione

Che cosa succede se non si utilizza Lock e Unlock e basta usare il costruttore WritabelBitmap(int, int)? Si rompono le cose?

Sembrerebbe che tra lo SL3 beta e il rilascio questa API è cambiato. Vedere Modifiche di documento Errata (Silverlight 3)

Altri suggerimenti

Viene fornito un altro dettaglio importante sul passaggio alla nuova WriteableBitmap questa risposta ...poiché il formato pixel ora è sempre pbgra32, è necessario impostare un valore alfa per ciascun pixel, altrimenti otterrai semplicemente un'immagine completamente bianca.In altre parole, il codice che in precedenza generava valori di pixel come questo:

byte[] components = new byte[4];
components[0] = (byte)(blue % 256);       // blue
components[1] = (byte)(grn % 256);        // green
components[2] = (byte)(red % 256);        // red
components[3] = 0;                        // unused

dovrebbe essere modificato in:

byte[] components = new byte[4];
components[0] = (byte)(blue % 256);       // blue
components[1] = (byte)(grn % 256);        // green
components[2] = (byte)(red % 256);        // red
components[3] = 255;                      // alpha
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top