dove sono finiti PixelFormats e WriteableBitmap.Lock in Silverlight3?
-
11-09-2019 - |
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?
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