转自:图像处理:椒盐噪声(杂点)

Posted on 收藏

1.效果图:
           图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)

2.实现原理:
           在处理每一个像素点时,取得一个随机值与指定的杂点出现概率的值进行判断,以决定是否修改当前像素点的颜色值,如果需要修改,则设定一个随机的颜色值。

3.实现代码:

                /// 添加杂点
 3图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)         /// </summary>
 4图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <param name="img">原始图像</param>
 5图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <param name="degree">指定杂点出现的概率</param>
 6图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <returns></returns>
 7图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        public static Image SaltNoise(Image img, int degree)
 8                    //设定概率在0--100
10图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            if (degree > 100) degree = 100;
11图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            if (degree < 0) degree = 0;
12图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
13图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            int width = img.Width;
14图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            int height = img.Height;
15图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
16图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Rectangle rect = new Rectangle(0, 0, width, height);
17图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            PixelFormat pf = PixelFormat.Format32bppArgb;
18图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
19图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //锁定Bitmap在内存中
20图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)              Bitmap bmp = new Bitmap(img);            
21图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            BitmapData data = bmp.LockBits(rect, ImageLockMode.ReadWrite, pf);
22图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
23图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            unsafe  //不安全模式
24                            //图像中第一个像素数据的地址
26图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                  byte* p = (byte*)data.Scan0;
27图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                
28图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                Random rand = new Random();
29图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
30图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                for (int i = 0; i < height; i++)
31                                    for (int j = 0; j < width; j++)
33                                            if (rand.Next(0, 100) < degree)
35                                                    p[2] = (byte)rand.Next(0, 255);
37图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                            p[1] = (byte)rand.Next(0, 255);
38图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                            p[0] = (byte)rand.Next(0, 255);
39图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                        }
40图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                        p += 4;    //见下面说明
41图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                       }
42图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                 }
43图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
44图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            }
45图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //从系统内存解锁此 Bitmap
46图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            bmp.UnlockBits(data);
47图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //返回修改后的图像
48图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            return (Image)bmp;
49图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        }

 

                /// 添加杂点
 3图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)         /// </summary>
 4图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <param name="img">原始图像</param>
 5图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <param name="degree">指定杂点出现的概率</param>
 6图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <returns></returns>
 7图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        public static Image SaltNoiseMirco(Image img, int degree)
 8                    //设定概率在0---100
10图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            if (degree < 0) degree = 0;
11图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            if (degree > 100) degree = 100;
12图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
13图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //取得原始图像的高宽值
14图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)              int width = img.Width;
15图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            int height = img.Height;
16图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
17图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //实例一个Bitmap
18图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Bitmap bmp = new Bitmap(img);
19图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
20图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Rectangle rect = new Rectangle(0, 0, width, height);
21图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            PixelFormat format = PixelFormat.Format32bppArgb;
22图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
23图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            BitmapData data = bmp.LockBits(rect, ImageLockMode.ReadWrite, format);
24图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
25图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            IntPtr ptr = data.Scan0;
26图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
27图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //申明固定长度的数组,以存放图像数据
28图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            int numBytes = width * height * 4;
29图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            byte[] rgbValues = new byte[numBytes];
30图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
31图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //将图像数据从非托管内存指针复制到托管的数组
32图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Marshal.Copy(ptr, rgbValues, 0, numBytes);
33图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
34图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Random rand = new Random();
35图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
36图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //修改符合条件的颜色值
37图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            for (int i = 0; i < numBytes; i +=4)
38                            if (rand.Next(0, 100) < degree)
40                                    rgbValues[i] = (byte)rand.Next(0, 255);
42图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                    rgbValues[i + 1] = (byte)rand.Next(0, 255);
43图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                    rgbValues[i + 2] = (byte)rand.Next(0, 255);                    
44图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                }
45图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            }
46图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
47图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //将图像数据从托管的数组复制到非托管内存指针
48图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Marshal.Copy(rgbValues, 0, ptr, numBytes);
49图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            bmp.UnlockBits(data);
50图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
51图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            return (Image)bmp;
52图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)             
53图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        }

 

4.程序说明:
        A.利用LockBits方法做图像处理效率明显高于利用GetPixel方法和SetPixel方法,可比较与柔化(平滑)处理
        B.关于"方法一"
          (1)编译时可能会出现错误提示“不安全代码只会在使用 /unsafe 编译的情况下出现”,处理如下:
                 右击项目选择"属性"-->"生成"-->勾选"允许不安全代码"-->"保存"。
          (2)p += 4:
                 由于PixelFormat format = PixelFormat.Format32bppArgb;
                 指定图像中每个像素的颜色数据的格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位。
                 所以图像像素颜色值的存储用4个字节,分别表示B、G、R、A,各占一个字节,
                 p[0]:B、 p[1]:G、 p[2]:R、 p[3]:A,p+=4表示到当前像素的下一个像素的开始位置。
        C.关于"方法二"
          (1)Marshal.Copy()将图像数据从非托管内存指针复制到托管的数组,避免使用不安全代码。
          (2)int numBytes = width * height * 4;
                 存放图像像素数据的数组长度 = 总像素数 * 每个像素所占的字节数。

1.效果图:
           图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)

2.实现原理:
           在处理每一个像素点时,取得一个随机值与指定的杂点出现概率的值进行判断,以决定是否修改当前像素点的颜色值,如果需要修改,则设定一个随机的颜色值。

3.实现代码:

                /// 添加杂点
 3图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)         /// </summary>
 4图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <param name="img">原始图像</param>
 5图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <param name="degree">指定杂点出现的概率</param>
 6图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <returns></returns>
 7图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        public static Image SaltNoise(Image img, int degree)
 8                    //设定概率在0--100
10图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            if (degree > 100) degree = 100;
11图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            if (degree < 0) degree = 0;
12图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
13图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            int width = img.Width;
14图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            int height = img.Height;
15图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
16图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Rectangle rect = new Rectangle(0, 0, width, height);
17图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            PixelFormat pf = PixelFormat.Format32bppArgb;
18图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
19图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //锁定Bitmap在内存中
20图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)              Bitmap bmp = new Bitmap(img);            
21图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            BitmapData data = bmp.LockBits(rect, ImageLockMode.ReadWrite, pf);
22图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
23图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            unsafe  //不安全模式
24                            //图像中第一个像素数据的地址
26图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                  byte* p = (byte*)data.Scan0;
27图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                
28图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                Random rand = new Random();
29图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
30图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                for (int i = 0; i < height; i++)
31                                    for (int j = 0; j < width; j++)
33                                            if (rand.Next(0, 100) < degree)
35                                                    p[2] = (byte)rand.Next(0, 255);
37图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                            p[1] = (byte)rand.Next(0, 255);
38图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                            p[0] = (byte)rand.Next(0, 255);
39图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                        }
40图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                        p += 4;    //见下面说明
41图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                       }
42图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                 }
43图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
44图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            }
45图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //从系统内存解锁此 Bitmap
46图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            bmp.UnlockBits(data);
47图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //返回修改后的图像
48图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            return (Image)bmp;
49图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        }

 

                /// 添加杂点
 3图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)         /// </summary>
 4图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <param name="img">原始图像</param>
 5图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <param name="degree">指定杂点出现的概率</param>
 6图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        /// <returns></returns>
 7图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        public static Image SaltNoiseMirco(Image img, int degree)
 8                    //设定概率在0---100
10图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            if (degree < 0) degree = 0;
11图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            if (degree > 100) degree = 100;
12图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
13图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //取得原始图像的高宽值
14图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)              int width = img.Width;
15图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            int height = img.Height;
16图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
17图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //实例一个Bitmap
18图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Bitmap bmp = new Bitmap(img);
19图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
20图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Rectangle rect = new Rectangle(0, 0, width, height);
21图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            PixelFormat format = PixelFormat.Format32bppArgb;
22图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
23图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            BitmapData data = bmp.LockBits(rect, ImageLockMode.ReadWrite, format);
24图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
25图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            IntPtr ptr = data.Scan0;
26图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
27图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //申明固定长度的数组,以存放图像数据
28图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            int numBytes = width * height * 4;
29图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            byte[] rgbValues = new byte[numBytes];
30图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
31图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //将图像数据从非托管内存指针复制到托管的数组
32图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Marshal.Copy(ptr, rgbValues, 0, numBytes);
33图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
34图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Random rand = new Random();
35图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
36图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //修改符合条件的颜色值
37图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            for (int i = 0; i < numBytes; i +=4)
38                            if (rand.Next(0, 100) < degree)
40                                    rgbValues[i] = (byte)rand.Next(0, 255);
42图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                    rgbValues[i + 1] = (byte)rand.Next(0, 255);
43图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                    rgbValues[i + 2] = (byte)rand.Next(0, 255);                    
44图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)                }
45图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            }
46图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
47图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            //将图像数据从托管的数组复制到非托管内存指针
48图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            Marshal.Copy(rgbValues, 0, ptr, numBytes);
49图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            bmp.UnlockBits(data);
50图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)
51图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)            return (Image)bmp;
52图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)             
53图像处理---椒盐噪声(杂点效果)
    

图像处理:椒盐噪声(杂点)        }

 

4.程序说明:
        A.利用LockBits方法做图像处理效率明显高于利用GetPixel方法和SetPixel方法,可比较与柔化(平滑)处理
        B.关于"方法一"
          (1)编译时可能会出现错误提示“不安全代码只会在使用 /unsafe 编译的情况下出现”,处理如下:
                 右击项目选择"属性"-->"生成"-->勾选"允许不安全代码"-->"保存"。
          (2)p += 4:
                 由于PixelFormat format = PixelFormat.Format32bppArgb;
                 指定图像中每个像素的颜色数据的格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位。
                 所以图像像素颜色值的存储用4个字节,分别表示B、G、R、A,各占一个字节,
                 p[0]:B、 p[1]:G、 p[2]:R、 p[3]:A,p+=4表示到当前像素的下一个像素的开始位置。
        C.关于"方法二"
          (1)Marshal.Copy()将图像数据从非托管内存指针复制到托管的数组,避免使用不安全代码。
          (2)int numBytes = width * height * 4;
                 存放图像像素数据的数组长度 = 总像素数 * 每个像素所占的字节数。

相关文章:

  • 2021-04-28
  • 2022-12-23
  • 2022-12-23
  • 2021-05-21
  • 2021-10-17
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-27
  • 2021-10-24
相关资源
相似解决方案