点击此链接获取有关C#中图像处理的惊人指南。如果您浏览提交的用户,则可以查找指南的全部6个部分。
http://www.codeproject.com/Articles/1989/Image-Processing-for-Dummies-with-C-and-GDI-Part-1
该指南介绍了如何使用不安全的代码访问图像数据。我宁愿保持代码安全,并使用另一种方法如下:
Bitmap b = new Bitmap(img1);
BitmapData bitmapData = b.LockBits(
new Rectangle(0, 0, b.Width, b.Height),
ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb
);
int numPixels = b.Width * b.Height;
byte[] pixels = new byte[numPixels * 3]; // 3 bytes per pixel
Marshal.Copy(bitmapData.Scan0, pixels, 0, pixels.Length);
// Use this method to apply an effect to each pixel individually
for (int i = 0; i < pixels.Length; i++)
{
byte value = pixels[i];
// modify value
pixels[i] = value;
}
// Use this method to apply an effect that considers RGB relationship
byte red, green, blue;
for (int i = 0; i < pixels.Length; i += 3)
{
blue = pixels[i];
green = pixels[i + 1];
red = pixels[i + 2];
// modify values
pixels[i] = blue;
pixels[i + 1] = green;
pixels[i + 2] = red;
}
Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length);
b.UnlockBits(bitmapData);
每个不同的图像处理技术是不C#特定。通过对算法的基本了解,您应该可以将其应用于此代码。
@ DanielA.White:我对setPixel一起砍死()方法现在的工作,但它的时间太长。 – Mark