博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Save a 32-bit Bitmap as 1-bit .bmp file in C#
阅读量:6840 次
发布时间:2019-06-26

本文共 943 字,大约阅读时间需要 3 分钟。

What is the easiest way to convert and save a 32-bit Bitmap to a 1-bit (black/white) .bmp file in C#?

This code will get the job done

using System.Drawing.Imaging;using System.Runtime.InteropServices;...public static Bitmap BitmapTo1Bpp(Bitmap img) {  int w = img.Width;  int h = img.Height;  Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);  BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);  byte[] scan = new byte[(w + 7) / 8];  for (int y = 0; y < h; y++) {    for (int x = 0; x < w; x++) {      if (x % 8 == 0) scan[x / 8] = 0;      Color c = img.GetPixel(x, y);      if (c.GetBrightness() >= 0.5) scan[x / 8] |= (byte)(0x80 >> (x % 8));    }    Marshal.Copy(scan, 0, (IntPtr)((long)data.Scan0 + data.Stride * y), scan.Length);  }  bmp.UnlockBits(data);  return bmp;}

  

You can speed it up, if necessary, by using unsafe code to replace the GetPixel() method.

转载地址:http://vhwul.baihongyu.com/

你可能感兴趣的文章
Don't be too serious about knowing the world
查看>>
servlet,RMI,webservice之间的区别
查看>>
Java异常架构
查看>>
Git 分支合并冲突及合并分类
查看>>
解决UnicodeEncodeError: 'ascii' codec can't encode characters in position
查看>>
Android开机广播android.intent.action.BOOT_COMPLETED
查看>>
Linux服务器信息收集
查看>>
怎样在 CentOS 7.0 上安装和配置 VNC 服务器
查看>>
学习 SQL 语句 - Select(2): 指定表中的字段
查看>>
iptraf
查看>>
Tomcat JDBC pool源码部析
查看>>
a 伪类在IE6下优先级大于class
查看>>
iOS 导出 ipa 包时 四个选项的意义
查看>>
我的友情链接
查看>>
android 简单解决询问权限问题和apk打包过大问题
查看>>
Android Accessibility学习笔记
查看>>
QEMU用户模式学习笔记
查看>>
两种方法解决mysql主从不同步
查看>>
Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群
查看>>
Spring高级应用之注入嵌套Bean
查看>>