我正在为未来的项目做一些测试,我将在其中创建一个图像加密器。现在我只是想收集一种将位图转换为字节数组的方法,将其保存到文本文件中,重新加载它,然后以不同的名称重新保存它。我让它工作......之后文件大小有问题。我转换后的图像(从字节数组中读取以创建图像的图像)显示的文件大小比原始图像大。这是我的代码:
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 的大小与应该相等的字节数组文件版本不同。所以为了解决这个问题,我需要一种有效或正确的方法来做这两个函数所做的事情。