點擊此鏈接獲取有關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