когда использовать WriteableBitmap и BitmapImage в silverlight

Я пытаюсь отобразить изображение с помощью BitmapImage в течение некоторого времени, и это сработало. Я изменил изображение, и оно перестало работать.

Для Bitmapimage я использовал этот код:

                            `ms.Seek(0, SeekOrigin.Begin); // ms is memory stream
                            BitmapImage b = new BitmapImage();
                            b.SetSource(ms);
                            image.ImageSource = b;`

Я столкнулся с фрагментом кода, где он проверял, соответствует ли длина байтов [] == 14400

 if(bytes.length == 14400)
  {
  var bmp = new WriteableBitmap(width, height);
  Buffer.BlockCopy(buffer, 0, bmp.Pixels, 0, buffer.Length);
 }

Я хочу знать, когда использовать WriteableBitmap и BitmapImage.


person user2526236    schedule 14.01.2015    source источник


Ответы (1)


Из iProgrammer:

Растровые изображения обычно реализуются как неизменяемые объекты. Это означает, что после создания растрового изображения вы не можете вносить в него какие-либо изменения. Вы можете манипулировать растровыми изображениями, создавая новые версии, которые сразу же становятся неизменными ...

WriteableBitmap, как следует из названия, не является неизменным, и вы можете обращаться к его отдельным пикселям и манипулировать ими сколько угодно. Это идеальный способ работы, когда вам нужны динамические растровые изображения. iProgrammer - WriteableBitmap

Из MSDN:

«Используйте класс WriteableBitmap для обновления и визуализации растрового изображения на покадровой основе ...» MSDN - Класс WriteableBitmap

В разделе «Примеры» статьи MSDN также показано, как обновить изображение WritableBitmap при ответе на события мыши. Код в примере стирает пиксели изображения, устанавливая значения ARGB пикселя на 0, когда правая кнопка мыши нажата. Код также показывает, как обновить отдельные пиксели изображения, в котором левая кнопка мыши нажата. По сути, код показывает элементарный редактор пиксельных изображений.

Дело, однако, в том, что вы не можете изменять данные изображения при использовании обычного растрового изображения - вместо этого вы должны использовать WritableBitmap. Однако вы можете визуализировать и то, и другое, если хотите.

person bleepzter    schedule 14.01.2015
comment
Растровые изображения являются изменяемыми / неизменяемыми, из вашего ответа я вижу, что растровые изображения изменяются, поскольку вы создаете растровое изображение, которое вы не можете его изменить. - person user2526236; 15.01.2015