当前位置: 首页 > 编程语言 > C#

C#学习教程:.netcompactframework中图片转1bpp位图分享

时间:2023-04-10 23:18:06 C#

.netcompactframework中图片转1bpp位图节省文件空间。完整的.NETFramework具有枚举PixelFormat.Format1bppIndexed,但.NETCompactFramework不支持它。有没有人找到在WindowsMobile中实现此目的的方法?过去我必须这样做才能生成通过蓝牙打印的黑白报告(彩色或灰度图像对于打印机的缓冲区来说太大)。原来我必须使用本机代码创建图像。这是一个片段:privatevoidCreateUnmanagedResources(){//为了安全起见,清理任何已经分配的ReleaseUnmanagedResources();bih=newBITMAPINFOHEADER();bih.biBitCount=1;bih.biClrImportant=0;bih.biClrUsed=0;bih.biCompression=0;bih.biHeight=m_cy;bih.biPlanes=1;bih.biSize=(uint)(Marshal.SizeOf(typeof(BITMAPINFOHEADER))-8);bih.biSizeImage=0;bih.biWidth=m_cx;bih.biXPelsPerMeter=0;bih.biYPelsPerMeter=0;bih.clr2=0xffffff;bih.clr1=0x0;hDC=Win32.CreateCompatibleDC(IntPtr.Zero);pBits=IntPtr.Zero;hBitmap=Win32.CreateDIBSection(hDC,bih,1,refpBits,IntPtr.Zero,0);hbmOld=Win32.SelectObject(hDC,hBitmap);}privatevoidReleaseUnmanagedResources(){if(hbmOld!=IntPtr.Zero)Win32.SelectObject(hDC,hbmOld);如果(hBitmap!=IntPtr.Zero)Win32.DeleteObject(hBitmap);如果(hDC!=IntPtr.Zero)Win32.DeleteDC(hDC);然后我使用Graphics.FromHdc获取一个托管图形对象,我可以把报告绘制到。我使用BinaryWriter进行保存,但这是在CF1.0的日子里,当时Bitmap类没有保存,所以你在那里是自由和清晰的。谢谢你给我指明了正确的方向,ctacke。我不能使用位图类来保存图像数据。它不断抛出OutOfMemoryException。我按照您的建议使用BinaryWriter编写了位图。我的最终解决方案返回一个字节数组,您可以选择将其写入磁盘、保存到数据库、传输等。类ImageHelper{[StructLayout(LayoutKind.Sequential)]publicstructBITMAPINFOHEADER{publicBITMAPINFOHEADER(ushortbpp,intheight,intwidth){biBitCount=bpp;双宽度=宽度;双高=高度;biSize=(uint)Marshal.SizeOf(typeof(BITMAPINFOHEADER));双平面=1;//必须为1biCompression=0;//无压缩biSizeImage=0;//没有压缩,所以可以是0biXPelsPerMeter=0;biYPelsPerMeter=0;biClrUsed=0;biClrImportant=0;}publicvoidStore(BinaryWriterbw){Store(bw,null);}publicvoidStore(BinaryWriterbw,uint[]colorPalette){//必须维护文件写入的顺序bw.Write(biSize);bw.Write(bw.Write(biHeight);bw.Write(biPlanes);bw.Write(biBitCount);bw.Write(biCompression);bw.Write(biSizeImage);bw.Write(biXPelsPerMeter););bw.Write(biClrUsed);bw.Write(biClrImportant);//writecolorpaletteif8bpporlessif(biBitCount即使在全帧中创建和保存双色调位图也有问题。我之前写过一篇关于这个问题的文章。http://www.codeproject.com/KB/GDI-plus/BitonalImageConverter.aspx我在紧凑框架的上下文中重新访问了这段代码,发现你的枚举值不存在,所以你不能从划痕双色调图像。我很想知道您是否可以在紧凑的框架中加载预先存在的双色调图像。如果您可以加载预先存在的双色位图,则可以降低级别并将位图图像格式直接写入磁盘或内存流,而不是使用GDI+对象,但这样做并非易事。.以上是C#学习教程:Convertinganimagetoa1bppbitmapinthe.netcompactframework。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文来自网络收藏不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢