在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+类和方法来实现更复杂的图像处理功能,例如缩放、旋转、裁剪、滤镜效果等。