Pregunta

Hace unos meses construí algunas muestras en línea como este de Jeff Prosise que utilizan la clase WriteableBitmap en Silverlight.

Al revisarlos hoy con el último instalador de Silverlight3 (3.0.40624.0), la API parece haber cambiado.

Descubrí algunos de los cambios.Por ejemplo, el descriptor de acceso de la matriz WriteableBitmap ha desaparecido, pero lo encontré en la nueva propiedad Pixels, así que en lugar de escribir:

 bmp[x]

puedo escribir

bmp.Pixels[x]

¿Existen reemplazos simples similares para estas llamadas o ha cambiado el patrón de uso en sí?

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

¿Alguien puede indicarme un ejemplo funcional utilizando la API actualizada?

¿Fue útil?

Solución

¿Qué pasa si usted no utiliza Lock y Unlock y sólo tiene que utilizar el constructor WritabelBitmap(int, int)? Se rompen las cosas?

Parece que entre SL3 beta y la liberación esta API ha cambiado. Ver Breaking cambios del documento Errata (Silverlight 3)

Otros consejos

Otro detalle importante sobre el cambio al nuevo WriteableBitmap se proporciona en esta respuesta ...Debido a que el formato de píxel ahora es siempre pbgra32, debe establecer un valor alfa para cada píxel; de lo contrario, obtendrá una imagen completamente blanca.En otras palabras, código que anteriormente generaba valores de píxeles como este:

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

debe cambiarse para que diga:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top