C#使用不安全指针来操作bitmap
C#允许通过不安全指针实现像C++一样操作指针,这个速度是最快的。下面这个例子是修改一幅RGB图像的每个像素值,速度很快,测试一张2592*1944的彩色图像,只需要几ms就能够全部遍历。
/// <summary> /// 操作彩色图像 /// </summary> /// <param name="bitmap"></param> private void GetRBBytes(Bitmap bitmap) { if (bitmap != null) { int width = bitmap.Width; int height = bitmap.Height; int length = height * 3 * width; BitmapData data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);//将图像放入内存 System.IntPtr Scan0 = data.Scan0;//获取指针头 int stride = data.Stride;//获取图像跨距宽度 int Tempcount = 0; unsafe { byte* p = (byte*)Scan0;//获取首个图像像素的地址 int offset = stride - width * 3; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { p[0] = (byte)20;//B p[1] = (byte)73;//G p[2] = (byte)100;//R } p += offset; } count = Tempcount; } bitmap.UnlockBits(data); this.pb_imageRgb.Image = bitmap; } }
4556
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix