最近在处理图像的时候,原来是CCITT T.6的,经过Batmap 的 Save(Stream, ImageFormat) 方法,结果图像压缩格式改变为 LZW的压缩格式,这样影响了程序的后续处理,最后修改为调用Save(Stream, ImageCodecInfo, EncoderParameters) 来保存,代码如下:
public static byte[] BitmapToBytes(Bitmap bitmap)
{
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
myEncoder = System.Drawing.Imaging.Encoder.Compression;
EncoderParameters myEncoderParameters;
myImageCodecInfo = GetEncoderInfo("image/tiff");
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4);
myEncoderParameters = new EncoderParameters(1);
myEncoderParameters.Param[0] = myEncoderParameter;
MemoryStream ms = null;
try
{
ms = new MemoryStream();
bitmap.Save(ms, myImageCodecInfo, myEncoderParameters);
byte[] byteImage = new Byte[ms.Length];
byteImage = ms.ToArray();
return byteImage;
}
catch (ArgumentNullException ex)
{
throw ex;
}
finally
{
ms.Close();
}
}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageDecoders();
for (j = 0; j < encoders.Length; j++)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}