Сохранение Bitmap как байтового массива приводит к странному размеру файла

Я провожу некоторое тестирование для будущего проекта, в котором я буду создавать шифровальщик изображений. Прямо сейчас я просто хотел собрать способ преобразования растрового изображения в массив байтов, сохранить его в текстовый файл, перезагрузить и повторно сохранить под другим именем. У меня заработало ... потом просто проблема с размером файла. Мое преобразованное изображение (то, которое считывается из массива байтов для создания изображения) показывает больший размер файла, чем исходное изображение. Вот мой код:

public class Program
    {
        public static void Main( string[] args )
        {
            /**
             * Load the bitmap and convert it to a byte array
             * then save the file to the desktop
             */
            byte[] imageBytes = ImageToByte( new Bitmap( "C:/Users/Krythic/Desktop/NovaEngine.png" ) );
            File.WriteAllBytes( "C:/Users/Krythic/Desktop/NovaImageData.txt" , imageBytes );
            /**
             * Load the saved image bytes, then convert them back into an image and save it to the 
             * desktop under a new name.
             */
            byte[] convertedImageBytes = File.ReadAllBytes("C:/Users/Krythic/Desktop/NovaImageData.txt");
            Bitmap image = ConvertToBitmap(convertedImageBytes);
            image.Save("C:/Users/Krythic/Desktop/ConvertedImage.png");
        }

        public static byte[] ImageToByte( Bitmap img )
        {
            ImageConverter converter = new ImageConverter();
            return ( byte[] )converter.ConvertTo( img , typeof( byte[] ) );
        }

        private static Bitmap ConvertToBitmap( byte[] imagesSource )
        {
            ImageConverter imageConverter = new ImageConverter();
            Image image = ( Image )imageConverter.ConvertFrom( imagesSource );
            return new Bitmap( image );
        }
    }

Я думаю, проблема в image.Save (); функция, которая ... я думаю ... не подбирает оптимальное сжатие для изображения. Может я ошибаюсь? Вот изображение страниц свойств для обоих изображений:  введите описание изображения здесь

Вы также заметите, что сохраненная версия исходного изображения с байтовым массивом показывает больший размер файла. Почему это? Разве размер файла не должен оставаться постоянным на протяжении всего периода преобразования?

Обновление: я почти уверен, что функции, которые я использую для преобразования изображения, используют плохие методы преобразования. Это объясняет, почему размер исходного png отличается от размера файла с байтовым массивом, который должен быть одинаковым. Чтобы решить эту проблему, мне нужен эффективный или правильный способ делать то же самое, что и эти две функции.


person Krythic    schedule 02.08.2015    source источник


Ответы (1)


Скорее всего, исходный файл был каким-то образом сжат, и повторная запись файла заканчивается сохранением несжатого файла, потому что C # не очень умен в этом.

и если C # был каким-то образом обновлен и стал лучше по сравнению с прошлым разом, когда я его использовал, это возможно, потому что вы конвертируете PNG в растровое изображение (растровое изображение неэффективно по размеру), а затем вы сохраняете растровое изображение в PNG

person ArrayCreator    schedule 02.08.2015
comment
Я создал исходное изображение с помощью GIMP, при его создании я выбрал 9 в качестве уровня сжатия. Вы знаете, какой уровень C # /. NET выбирает по умолчанию? - person Krythic; 02.08.2015
comment
никто . сохраняет все данные без сжатия - person ArrayCreator; 02.08.2015
comment
none он сохраняет все данные без сжатия, что является неверным утверждением. Размер файла без сжатия: 2,23 МБ. Я только что это проверил. - person Krythic; 02.08.2015