yinggggggg 2018-02-10 08:04 采纳率: 22.2%
浏览 1628
已结题

得到了像素颜色数组存到bitmap中太慢了,有没有什么好方式

图片说明
有没有更好的办法,这个感觉时间太久了
wpf中的图片有没有好用的,这里用的是winform中的bitmap

  • 写回答

3条回答 默认 最新

  • gis_zx92 2018-02-10 09:41
    关注

    C#可以用lockbits和unlockbits方法把bmp图像写进内存中,然后操作。这样效率很高。比如下面是把bmp图像转为灰度图像的代码。
    Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    BitmapData bData = bmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    byte[] bytes=new byte[bData.Stride*bData.Height];
    System.Runtime.InteropServices.Marshal.Copy(bData.Scan0, bytes, 0, bytes.Length);

            for (int j = 0; j < bData.Height; j++)
                for (int i = 0; i < bData.Width; i++)
                {
                    int pixel = j * bData.Stride + 3 * i;
                    byte avg=(byte)((bytes[pixel]+bytes[pixel+1]+bytes[pixel+2])/3);
                    bytes[pixel] = bytes[pixel + 1] = bytes[pixel + 2] = avg;
                }
            System.Runtime.InteropServices.Marshal.Copy(bytes, 0, bData.Scan0, bytes.Length);
            bmp.UnlockBits(bData);
    
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算