生成单色BMP图片

在项目的属性里要勾选 容许不安全代码

 public Bitmap ConvertTo24bppTo1bpp(Bitmap SrcImg)

         {
             unsafe
             {
                 byte * SrcPointer, DestPointer;
                 int  Width, Height, SrcStride, DestStride;
                 int  X, Y, Index, Sum; ;
                 Bitmap DestImg =  new  Bitmap(SrcImg.Width, SrcImg.Height, PixelFormat.Format1bppIndexed);
                 BitmapData SrcData =  new  BitmapData();
                 SrcImg.LockBits( new  Rectangle(0, 0, SrcImg.Width, SrcImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb, SrcData);
                 BitmapData DestData =  new  BitmapData();
                 DestImg.LockBits( new  Rectangle(0, 0, SrcImg.Width, SrcImg.Height), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed, DestData);
                 Width = SrcImg.Width; Height = SrcImg.Height; SrcStride = SrcData.Stride; DestStride = DestData.Stride;
                 for  (Y = 0; Y < Height; Y++)
                 {
                     SrcPointer = ( byte  *)SrcData.Scan0 + Y * SrcStride;
                     DestPointer = ( byte *)DestData.Scan0 + Y * DestStride;
                     Index = 7; Sum = 0;
                     for  (X = 0; X < Width; X++)
                     {
                         if  (*SrcPointer + (*(SrcPointer + 1) << 1) + *(SrcPointer + 2)>= 512) Sum += (1 << Index);
                         if  (Index == 0)
                         {
                             *DestPointer = ( byte )Sum;
                             Sum = 0;
                             Index = 7;
                             DestPointer++;
                         }
                         else
                             Index--;
                         SrcPointer+=3;
                     }
                     if  (Index != 7) *DestPointer = ( byte )Sum;
                 }
                 SrcImg.UnlockBits(SrcData);
                 DestImg.UnlockBits(DestData);
                 return  DestImg;
             }
         }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值