Silverlight: отобразите к байту []

Я могу преобразовать байт [] к изображению:

byte[] myByteArray = ...;  // ByteArray to be converted

MemoryStream ms = new MemoryStream(my);
BitmapImage bi = new BitmapImage();
bi.SetSource(ms);

Image img = new Image();
img.Source = bi;

Но я не могу преобразовать Изображение назад в байт []! Я нашел в Интернете решение, которое работает на WPF:

var bmp = img.Source as BitmapImage;
int height = bmp.PixelHeight;
int width  = bmp.PixelWidth;
int stride = width * ((bmp.Format.BitsPerPixel + 7) / 8);

byte[] bits = new byte[height * stride];
bmp.CopyPixels(bits, stride, 0);

Silverlight libary является столь крошечной, что класс BitmapImage не имеет никакого свойства под названием Формат!

Имеет кого-либо идея, которая решает мою проблему.

Я искал в Интернете в течение долгого времени для нахождения решения, но существует, не никакое решение, которое работает в Silverlight!

Спасибо!

6
задан Sperl Christoph 24 December 2009 в 14:14
поделиться

2 ответа

(битовый метод на пиксель, в котором вам не хватает только подробностей того, как информация о цвете хранится на пиксель)

Как предположил Энтони, проще всего было бы написать WriteableBitmap - смотрите http://kodierer. blogspot.com/2009/11/convert-encode-and-decode-silverlight.html для метода получения массива байт argb :

public static byte[] ToByteArray(this WriteableBitmap bmp)
{
   // Init buffer
   int w = bmp.PixelWidth;
   int h = bmp.PixelHeight;
   int[] p = bmp.Pixels;
   int len = p.Length;
   byte[] result = new byte[4 * w * h];

   // Copy pixels to buffer
   for (int i = 0, j = 0; i < len; i++, j += 4)
  {
      int color = p[i];
      result[j + 0] = (byte)(color >> 24); // A
      result[j + 1] = (byte)(color >> 16); // R
      result[j + 2] = (byte)(color >> 8);  // G
      result[j + 3] = (byte)(color);       // B
   }

    return result;
}
7
ответ дан 9 December 2019 в 20:44
поделиться

Нет такого решения, которое бы работало в Silverlight по дизайну. Изображения могут быть получены без необходимости соответствовать какой-либо политике междоменного доступа, как и другие http запросы. Основой этого ослабления правил кросс-домена является то, что данные, составляющие изображение, не могут быть извлечены в необработанном виде. Его можно использовать только как образ.

Если вы хотите просто записать и прочитать из растрового изображения, используйте класс WriteableBitmap вместо BitmapImage. Класс WriteableBitmap раскрывает свойство Pixels, недоступное в классе BitmapImage.

.
3
ответ дан 9 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: