///
欢迎来到天天文库
浏览记录
ID:38177453
大小:30.00 KB
页数:4页
时间:2019-05-24
《C sharp 将byte[]数据转成Bitmap》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C#将byte[]数据转成Bitmap //////使用byte[]数据,生成256色灰度 BMP位图/////////////// publicstaticBitmapCreateBitmap(byte[]origi
2、nalImageData,intoriginalWidth,intoriginalHeight){//指定8位格式,即256色 BitmapresultBitmap=newBitmap(originalWidth,originalHeight,System.Drawing.Imaging.PixelFormat.Format8bppIndexed);//将该位图存入内存中 MemoryStreamcurImageStream=newMemoryStream();resultBitm
3、ap.Save(curImageStream,System.Drawing.Imaging.ImageFormat.Bmp);curImageStream.Flush();//由于位图数据需要DWORD对齐(4byte倍数),计算需要补位的个数 intcurPadNum=((originalWidth*8+31)/32*4)-originalWidth;//最终生成的位图数据大小 intbitmapDataSize=((originalWidth*8+31)/32*4)*origi
4、nalHeight;//数据部分相对文件开始偏移,具体可以参考位图文件格式 intdataOffset=ReadData(curImageStream,10,4);//改变调色板,因为默认的调色板是32位彩色的,需要修改为256色的调色板 intpaletteStart=54;intpaletteEnd=dataOffset;intcolor=0;for(inti=paletteStart;i5、tempColor[0]=(byte)color;tempColor[1]=(byte)color;tempColor[2]=(byte)color;tempColor[3]=(byte)0;color++;curImageStream.Position=i;curImageStream.Write(tempColor,0,4);}//最终生成的位图数据,以及大小,高度没有变,宽度需要调整 byte[]destImageData=newbyte[bitmapDataSize];intdestWidth6、=originalWidth+curPadNum;//生成最终的位图数据,注意的是,位图数据从左到右,从下到上,所以需要颠倒 for(intoriginalRowIndex=originalHeight-1;originalRowIndex>=0;originalRowIndex--){intdestRowIndex=originalHeight-originalRowIndex-1;for(intdataIndex=0;dataIndex7、时还要注意,新的位图数据的宽度已经变化destWidth,否则会产生错位 destImageData[destRowIndex*destWidth+dataIndex]=originalImageData[originalRowIndex*originalWidth+dataIndex];}}//将流的Position移到数据段 curImageStream.Position=dataOffset;//将新位图数据写入内存中 curImage8、Stream.Write(destImageData,0,bitmapDataSize);curImageStream.Flush();//将内存中的位图写入Bitmap对象 resultBitmap=newBitmap(curImageStream);returnresultBitmap;}//
5、tempColor[0]=(byte)color;tempColor[1]=(byte)color;tempColor[2]=(byte)color;tempColor[3]=(byte)0;color++;curImageStream.Position=i;curImageStream.Write(tempColor,0,4);}//最终生成的位图数据,以及大小,高度没有变,宽度需要调整 byte[]destImageData=newbyte[bitmapDataSize];intdestWidth
6、=originalWidth+curPadNum;//生成最终的位图数据,注意的是,位图数据从左到右,从下到上,所以需要颠倒 for(intoriginalRowIndex=originalHeight-1;originalRowIndex>=0;originalRowIndex--){intdestRowIndex=originalHeight-originalRowIndex-1;for(intdataIndex=0;dataIndex7、时还要注意,新的位图数据的宽度已经变化destWidth,否则会产生错位 destImageData[destRowIndex*destWidth+dataIndex]=originalImageData[originalRowIndex*originalWidth+dataIndex];}}//将流的Position移到数据段 curImageStream.Position=dataOffset;//将新位图数据写入内存中 curImage8、Stream.Write(destImageData,0,bitmapDataSize);curImageStream.Flush();//将内存中的位图写入Bitmap对象 resultBitmap=newBitmap(curImageStream);returnresultBitmap;}//
7、时还要注意,新的位图数据的宽度已经变化destWidth,否则会产生错位 destImageData[destRowIndex*destWidth+dataIndex]=originalImageData[originalRowIndex*originalWidth+dataIndex];}}//将流的Position移到数据段 curImageStream.Position=dataOffset;//将新位图数据写入内存中 curImage
8、Stream.Write(destImageData,0,bitmapDataSize);curImageStream.Flush();//将内存中的位图写入Bitmap对象 resultBitmap=newBitmap(curImageStream);returnresultBitmap;}//
此文档下载收益归作者所有