阅读量:0
在C#的GDI+中实现图像处理,你可以使用Bitmap类来创建、操作和保存图像。以下是一些基本的图像处理操作示例:
- 创建一个新的Bitmap对象:
Bitmap bmp = new Bitmap(width, height);
- 使用Graphics对象在Bitmap上绘制:
Graphics g = Graphics.FromImage(bmp); g.DrawEllipse(Pens.Black, x, y, width, height);
- 保存Bitmap到文件:
bmp.Save("output.jpg", ImageFormat.Jpeg);
- 从文件加载Bitmap:
Bitmap loadedBmp = new Bitmap("input.jpg");
- 获取Bitmap的宽度和高度:
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+类和方法来实现更复杂的图像处理功能,例如缩放、旋转、裁剪、滤镜效果等。