C#中使用byte[]数据,生成Bitmap |
您所在的位置:网站首页 › byte转成bitmap › C#中使用byte[]数据,生成Bitmap |
转自:http://www.bitscn.com/pdb/dotnet/200904/160808.html 摸索了3天,终于成功实现了使用已知byte[]数据,生成Bitmap(256色灰度 BMP位图)。 其中遇到了很多问题: 如何在C#(GDI+)中操作Bitmap,获取位图的各种数据,就像在C++|中一样 如何修改Bitmap的调色板 如何解决位图显示错位的问题,即位图的4字节对齐问题 如何用数据生成位图 总结一下,希望对需要的朋友有所帮助,少走弯路。 /// /// 使用byte[]数据,生成256色灰度 BMP 位图 /// /// /// /// /// public static Bitmap CreateBitmap( byte [] originalImageData, int originalWidth, int originalHeight) { // 指定8位格式,即256色 Bitmap resultBitmap = new Bitmap(originalWidth, originalHeight, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); // 将该位图存入内存中 MemoryStream curImageStream = new MemoryStream(); resultBitmap.Save(curImageStream, System.Drawing.Imaging.ImageFormat.Bmp); curImageStream.Flush(); // 由于位图数据需要DWORD对齐(4byte倍数),计算需要补位的个数 int curPadNum = ((originalWidth * 8 + 31 ) / 32 * 4 ) - originalWidth; // 最终生成的位图数据大小 int bitmapDataSize = ((originalWidth * 8 + 31 ) / 32 * 4 ) * originalHeight; // 数据部分相对文件开始偏移,具体可以参考位图文件格式 int dataOffset = ReadData(curImageStream, 10 , 4 ); // 改变调色板,因为默认的调色板是32位彩色的,需要修改为256色的调色板 int paletteStart = 54 ; int paletteEnd = dataOffset; int color = 0 ; for ( int i = paletteStart; i = 0 ; originalRowIndex -- ) { int destRowIndex = originalHeight - originalRowIndex - 1 ; for ( int dataIndex = 0 ; dataIndex |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |