#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.
Комментариев нет:
Отправить комментарий