У меня странная проблема - у меня около 14,5 миллионов растровых изображений, которые предположительно несжатые. Мне нужно преобразовать эти растровые изображения в JPG и сохранить их в базе данных.
Когда я использую классы, предоставленные в библиотеке .NET System.Drawing, чтобы сохранить растровое изображение как ImageFormat.Jpeg, результирующий JPEG составляет примерно в два раза размер исходного растрового изображения. Вот код:
byte[] bitmapBytes = //get from the db
using(MemoryStream bitmapStream = new MemoryStream(bitmapBytes))
{
using(Bitmap bitmap = (Bitmap)Bitmap.FromStream(bitmapStream))
{
bitmap.Save("jpg.jpg", ImageFormat.Jpeg);
}
}
Я просмотрел HEX нескольких из этих изображений, и похоже, что настройка сжатия - "none". Так что я предполагаю, что они несжатые. Кроме того, HEX для исходного файла имеет код «BMP», а полученный файл имеет код «JFIF», как и следовало ожидать.
Изображения черно-белые, без цветов.
Есть мысли о том, почему это происходит? Ищем указатели в правильном направлении ...
редактирует:
- Я пытался использовать альтернативную перегрузку для сохранения, которая позволяет вам указать качество. Никакой пользы не видно.
- Я должен также указать, что я в некоторой степени застрял здесь с JPEG. Это устаревшая система, и другие ее части ожидают JPEG.
Атрибуты изображения:
- Размеры растрового изображения: 152x48
- Размер растрового файла: 1022 байта
- JPEG: тот же размер
- Размер JPEG: 2,2 КБ
- Информация о растровом изображении: индексированный, 1 слой (2 цвета)
- Разрешение растрового изображения: 96,012x 96,012 ppi