куда делись PixelFormats и WriteableBitmap.Lock в Silverlight3? - PullRequest
3 голосов
/ 01 декабря 2009

Несколько месяцев назад я построил несколько онлайн-примеров, таких как , от Jeff Prosise , которые используют класс WriteableBitmap в Silverlight.

Пересматривая их сегодня с последней версией установщика Silverlight3 (3.0.40624.0), API, похоже, изменился.

Я понял некоторые изменения. Например, средство доступа к массиву WriteableBitmap исчезло, но я нашел его в новом свойстве Pixels, поэтому вместо записи:

 bmp[x]

Я могу написать

bmp.Pixels[x]

Существуют ли аналогичные простые замены для этих вызовов или изменился сам шаблон использования?

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

Кто-нибудь может подсказать мне рабочий пример использования обновленного API?

Ответы [ 2 ]

2 голосов
/ 17 января 2010

Другая важная деталь о переходе на новый WriteableBitmap приведена в этот ответ ... поскольку формат пикселя теперь всегда pbgra32, вы должны установить альфа-значение для каждого пикселя, в противном случае вы просто получите полностью белая картинка. Другими словами, код, который ранее генерировал значения пикселей, например:

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

следует изменить следующим образом:

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
1 голос
/ 01 декабря 2009

Что произойдет, если вы не используете Lock и Unlock и просто используете конструктор WritabelBitmap(int, int)? Что-то ломается?

Казалось бы, между SL3 Beta и выпуском этот API изменился. См. Исправления документа "Разрывные изменения" (Silverlight 3)

...