C#的Bitmap

本文详细介绍了C#中Bitmap类的使用,包括其继承层次、主要方法和属性,如GetPixel和SetPixel、PixelFormat、Palette、Height和Width等。还提到了LockBits和UnlockBits方法在图像处理中的重要性,并提供了Bitmap对象的创建、保存及转换为字节数组的方法。同时,指出默认保存的GIF图像可能会失真。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#的Bitmap

Bitmap 是用于处理由像素数据定义的图像的对象。


一 继承层次结构

System.Object 
   System.MarshalByRefObject
     System.Drawing.Image
       System.Drawing.Bitmap

二 介绍

Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.
因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下:

1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色.

2. PixelFormat属性:返回图像的像素格式.

3. Palette属性:获取和设置图像所使用的颜色调色板.

4. Height Width属性:返回图像的高度和宽度.

5. LockBits方法和UnlockBits方法:分别锁定和解锁系统内存中的位图像素.在基于像素点的图像处理方法中使用LockBits和UnlockBits是一个很好的方式,这两种方法可以使我们指定像素的范围来控制位图的任意一部分,从而消除了通过循环对位图的像素逐个进行处理,每调用LockBits之后都应该调用一次UnlockBits.

常用API

打开

Bitmap bp =  new Bitmap(filepath);

显示

保存

showBitmap.Save(saveFileDialog.FileName,format );
Save.(string ,ImageCodeInfo,EncoderParameters) 

使用方法:
参数:

filename 类型:System.String 字符串,包含要将此 Image 保存到的文件的名称。

encoder 类型:System.Drawing.Imaging.ImageCodecInfo 此 Image 的 ImageCodecInfo。

encoderParams 类型:System.Drawing.Imaging.EncoderParameters 用于该 Image 的 EncoderParameters。


ImageCodecInfo myImageCodecInfo;
//获得JPEG格式的编码器
myImageCodecInfo = GetEncoderInfo("image/jpeg");

常用方法

Bitmap转Byte

public static byte[] Bitmap2Byte(Bitmap bitmap)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                bitmap.Save(stream , ImageFormat.Jpeg);
                byte[] data = new byte[stream.Length];
                stream.Seek(0 , SeekOrigin.Begin);
                stream.Read(data ,0  , Convert.ToInt32(stream.Length));
                return data;
            }
        }

注意:

在c#中默认可以讲bitmap保存为gif等格式,但是这种保存方法保存的gif会严重失真


参考文献

  1. https://blog.csdn.net/qq_20161893/article/details/78478125
  2. https://blog.csdn.net/yingzhaom/article/details/7743429
  3. https://www.cnblogs.com/rainbow70626/p/5774841.html
### C#Bitmap 类的用法 在 C# 的图形处理领域,`System.Drawing.Bitmap` 是一个非常重要的类。它继承自 `System.Drawing.Image` 并提供了更多操作图像的功能。下面详细介绍其基本功能以及一些常见的应用场景。 #### 创建 Bitmap 对象 可以通过多种方式创建 `Bitmap` 对象: 1. **从文件加载图片** 使用静态方法 `FromFile` 可以轻松读取本地磁盘上的图片文件并将其转换为 `Bitmap` 实例[^1]。 ```csharp string filePath = "example.jpg"; Bitmap bitmap = new Bitmap(filePath); ``` 2. **通过指定宽度和高度初始化空白位图** 如果需要生成一张新的空白图片,则可以传递宽高参数来实例化对象。 ```csharp int width = 800; int height = 600; Bitmap blankBitmap = new Bitmap(width, height); ``` 3. **基于现有图像克隆新位图** 当希望复制一份已有图像时,可利用构造函数完成此目标。 ```csharp Bitmap clonedBitmap = new Bitmap(originalBitmap); ``` #### 修改像素数据 访问单个像素的颜色属性是常见需求之一。借助索引器语法能够实现逐点编辑效果。 ```csharp for (int y = 0; y < bitmap.Height; ++y) { for (int x = 0; x < bitmap.Width; ++x) { Color pixelColor = bitmap.GetPixel(x, y); // 获取当前坐标处颜色值 // 假设我们想把红色通道强度加倍 byte redComponent = Math.Min(255, pixelColor.R * 2); Color updatedColor = Color.FromArgb( pixelColor.A, redComponent, pixelColor.G, pixelColor.B); bitmap.SetPixel(x, y, updatedColor); // 设置修改后的颜色回原位置 } } ``` 注意上述循环效率较低,在实际项目里推荐采用 LockBits 方法配合 unsafe 模式提升性能。 #### 资源释放的重要性 由于 GDI+ 底层机制原因,每当创建一个新的 Graphics 或者 Bitmap 都会消耗一定量未托管内存资源。因此务必记得适时调用 Dispose 函数清理不再使用的对象以免引发泄漏风险[^3]。 ```csharp using(Bitmap tempBmp = new Bitmap(sourcePath)) { ProcessImage(tempBmp); } // 自动销毁临时变量tempBmp所占空间 ``` #### 结合第三方库扩展能力 对于更复杂的需求比如视频帧捕获或者实时流媒体传输等场景单纯依靠标准框架难以满足全部期望成果。此时引入专门设计用于计算机视觉方向开源工具包 OpenCV 成为了不错的选择方案[^2]。不过需要注意跨平台编译配置等问题可能会增加开发难度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值