标签:width C# bitmap int byte height data 指针
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; } }
标签:width,C#,bitmap,int,byte,height,data,指针 来源: https://www.cnblogs.com/zxtang/p/15977791.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。