📜  c# 从图像中获取像素颜色 - C# (1)

📅  最后修改于: 2023-12-03 15:13:50.286000             🧑  作者: Mango

C# 从图像中获取像素颜色

在C#中,我们可以轻松地从图像中获取像素的颜色值。下面是一些关于C#获取像素颜色的方法和代码示例:

1. 使用Bitmap对象

在C#中,我们可以通过Bitmap对象获取像素颜色。Bitmap是一个表示位图图像的GDI+类,它提供了访问和操作像素的方法。

// Load image from file
Bitmap bmp = new Bitmap("image.png");

// Get color of pixel at x=10, y=20
Color pixelColor = bmp.GetPixel(10, 20);
2. 使用LockBits方法

除了使用Bitmap对象,我们还可以使用LockBits方法获取像素颜色。LockBits方法提供了一个指向像素数据的指针,我们可以通过指针访问像素颜色。

// Load image from file
Bitmap bmp = new Bitmap("image.png");

// Lock the bitmap's bits
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly, bmp.PixelFormat);

// Get the address of the first line
IntPtr ptr = bmpData.Scan0;

// Declare an array to hold the bytes of the bitmap
int bytes = Math.Abs(bmpData.Stride) * bmp.Height;
byte[] rgbValues = new byte[bytes];

// Copy the RGB values into the array
Marshal.Copy(ptr, rgbValues, 0, bytes);

int x = 10;
int y = 20;

// Get the index of the pixel at (x,y)
int index = (y * bmpData.Stride) + (x * 3);

// Get the color values of the pixel
byte b = rgbValues[index];
byte g = rgbValues[index + 1];
byte r = rgbValues[index + 2];
Color pixelColor = Color.FromArgb(r, g, b);

// Unlock the bitmap's bits
bmp.UnlockBits(bmpData);

在上述代码中,我们使用了Marshal类的Copy方法从BitmapData.Scan0指针处复制像素数据到一个字节数组中。然后,我们使用数组索引访问指定位置的像素颜色。

注意,由于像素数据以扫描线方式存储,所以我们需要对Stride进行处理,使其始终为正数。

3. 性能比较

尽管LockBits方法需要编写更多的代码,但它比GetPixel方法更快。在对大型图像进行像素访问时,使用LockBits方法会带来更快的性能。

结论

在C#中,我们可以使用Bitmap对象或LockBits方法获取图像中的像素颜色。这些方法都提供了访问和操作像素的便捷途径,使我们能够轻松地在应用程序中处理图像。