1

我正在为未来的项目做一些测试,我将在其中创建一个图像加密器。现在我只是想收集一种将位图转换为字节数组的方法,将其保存到文本文件中,重新加载它,然后以不同的名称重新保存它。我让它工作......之后文件大小有问题。我转换后的图像(从字节数组中读取以创建图像的图像)显示的文件大小比原始图像大。这是我的代码:

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 的大小与应该相等的字节数组文件版本不同。所以为了解决这个问题,我需要一种有效或正确的方法来做这两个函数所做的事情。

4

1 回答 1

-1

很可能原始文件以某种方式被压缩,并且重写文件最终会保存一个未压缩的文件,因为 C# 在这方面不是很聪明。

如果 C# 以某种方式更新并且比我上次使用它时变得更好,这可能是因为您正在将 PNG 转换为位图(位图的大小效率不高),然后您将位图保存为 PNG

于 2015-08-02T16:51:18.277 回答