#c_sharp #массивы #net #изображения #bitmap
Допустим, есть функция для перевода Bitmap в byte[]:
public byte[] BitmapToByte(Bitmap bitmap)
{
using (var stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
return stream.ToArray();
}
}
Не очень эффективно, зато просто и надежно. А главное - понятно, что получается в
результате - файл в формате BMP (кстати, можно еще задать формат MemoryBmp, но в чем
его смысл, я так и не смог уразуметь - буду благодарен, если кто-то просветит, хотя
вопрос и не об этом).
Все хорошо, но я в порядке эксперимента попытался переделать функцию вот так:
public byte[] BitmapToByte(Bitmap bitmap)
{
return (byte[])(new ImageConverter()).ConvertTo(bitmap, typeof(byte[]));
}
В результате получается какая-то белиберда, явно не в формате BMP (хотя бы потому
что первые два байта - не ASCII-коды символов "BM"). Но что именно получается - я так
и не смог понять, хотя и гуглил, и stackoverflow читал.
В большинстве источников эти два способа подаются как альтернативные. Нашел только
один вопрос на stackoverflow, там все же уточнялось, что формат другой. Но какой именно
и как, какой опцией проконтролировать его выбор - непонятно.
Ответы
Ответ 1
ImageConverter использует формат по умолчанию, то есть вызывает просто: bitmap.Save(stream); В зависимости от того, как вы создавали или загружали файл, формат может быть различным, например, GIF или PNG. Если не получается сохранить в оригинальном формате (например, ICO) или это приведёт к потерям (например, JPEG), то используется PNG. Если вы просто создали картинку, ни откуда не загружая, то тоже будет использован PNG.
Комментариев нет:
Отправить комментарий