откуда взялись PixelFormats и WriteableBitmap.Блокировка в Silverlight3?
-
11-09-2019 - |
Вопрос
Несколько месяцев назад я создал несколько онлайн-образцов, таких как это от Джеффа Просиза которые используют класс WriteableBitmap в Silverlight.
Возвращаясь к ним сегодня с последним установщиком Silverlight3 (3.0.40624.0), API, похоже, изменился.
Я разобрался с некоторыми изменениями.Например, средство доступа к массиву WriteableBitmap исчезло, но я нашел его в свойстве new Pixels, поэтому вместо записи:
bmp[x]
Я могу писать
bmp.Pixels[x]
Существуют ли аналогичные простые замены для этих вызовов, или изменился сам шаблон использования?
bmp = new WriteableBitmap(width, height, PixelFormats.Bgr32);
bmp.Lock();
bmp.Unlock();
Кто-нибудь может указать мне на рабочий пример использования обновленного API?
Решение
Что произойдет, если вы не будете использовать Lock
и Unlock
и просто используйте WritabelBitmap(int, int)
конструктор?Что-нибудь ломается?
Казалось бы, между бета-версией SL3 и релизом этот API изменился. Смотрите раздел "Основные изменения" в документе Errata (Silverlight 3)
Другие советы
Еще одна важная деталь о переходе на новую 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