在C#的GDI+中實現圖像處理,你可以使用Bitmap類來創建、操作和保存圖像。以下是一些基本的圖像處理操作示例:
Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.DrawEllipse(Pens.Black, x, y, width, height);
bmp.Save("output.jpg", ImageFormat.Jpeg);
Bitmap loadedBmp = new Bitmap("input.jpg");
int width = loadedBmp.Width;
int height = loadedBmp.Height;
你可以通過LockBits方法鎖定Bitmap的像素數據,然后直接訪問和修改像素值。這是一個示例代碼,它將Bitmap的所有像素顏色設置為紅色:
BitmapData bmpData = loadedBmp.LockBits(
new Rectangle(0, 0, loadedBmp.Width, loadedBmp.Height),
ImageLockMode.ReadOnly,
loadedBmp.PixelFormat);
int bytesPerPixel = Bitmap.GetPixelFormatSize(loadedBmp.PixelFormat) / 8;
int byteCount = bmpData.Stride * loadedBmp.Height;
byte[] pixels = new byte[byteCount];
IntPtr ptrFirstPixel = bmpData.Scan0;
Marshal.Copy(ptrFirstPixel, pixels, 0, pixels.Length);
for (int y = 0; y < loadedBmp.Height; y++)
{
int currentLine = y * bmpData.Stride;
for (int x = 0; x < loadedBmp.Width; x++)
{
int currentPixel = currentLine + x * bytesPerPixel;
byte[] pixel = new byte[bytesPerPixel];
Marshal.Copy(ptrFirstPixel + currentPixel, pixel, 0, bytesPerPixel);
// 修改像素值,例如設置為紅色
pixel[0] = 255; // 紅色通道
pixel[1] = 0; // 綠色通道
pixel[2] = 0; // 藍色通道
Marshal.Copy(pixel, 0, ptrFirstPixel + currentPixel, bytesPerPixel);
}
}
loadedBmp.UnlockBits(bmpData);
注意:上述代碼中的Marshal.Copy
和LockBits
方法用于在原始像素數據和內存之間進行數據傳輸。你需要根據你的需求來修改像素值。
這只是C# GDI+中圖像處理的一些基本示例。你可以使用更多的GDI+類和方法來實現更復雜的圖像處理功能,例如縮放、旋轉、裁剪、濾鏡效果等。