当前位置: 首页 > news >正文

一文读懂 C# 中的 Bitmap

一文读懂 C# 中的 Bitmap

  • 一、Bitmap 到底是什么?
  • 二、推荐使用场景
  • 三、实战 Demo
    • 基础用法:加载、创建和保存
    • 进阶用法
      • 缩放图片
      • 裁剪图片
      • 颜色调整(反色处理)
  • 四、核心方法和属性说明
    • 常用函数
    • 常用属性
  • 五、避坑指南、注意事项
  • 六、总结与决策

一文读懂 C# 中的 Bitmap
在 C# 的图像处理世界里,Bitmap 类无疑是一个绕不开的核心角色。无论是开发图片编辑工具、处理摄像头采集的帧数据,还是生成动态二维码,都能看到它的身影

一、Bitmap 到底是什么?

  1. Bitmap 是 System.Drawing 命名空间下的一个类,本质上是对 Windows GDI + 位图的封装,主要用于存储和处理图像数据
  2. 核心作用
  • 图像的加载:从文件、内存等多种来源读取图像数据
  • 图像创建:按需生成全新图像(空白图像、带初始内容图像)
  • 图像的编辑:裁剪、缩放、颜色调整等常见图像处理操作
  • 图像保存:可以保存为多种图像格式
  1. 特点鲜明
  • 功能丰富:具备大量的方法和属性
  • 集成GDI + :借助 GDI + 强大绘图能力
  • 格式兼容广:支持 BMP、JPEG、PNG 等常见格式

二、推荐使用场景

Bitmap 类虽然强大,但并非所有场景都适用。以下这些场景尤其适合它发挥优势:

  • 本地图片处理工具:如批量加水印、调整尺寸的小工具
  • 摄像头帧数据处理:从摄像头获取的帧数据可以转为 Bitmap 进行后续处理
  • 图像格式转换:PNG、JPG、BMP 等格式间转换时
  • 简单的图像编辑功能:裁剪头像、生成验证码图片等
  • 报表或文档中的图像生成:动态生成带数据的图表并嵌入文档

需要注意的是,在 Web 应用(如ASP.NET)中使用时要谨慎,因为它依赖 GDI+,可能存在性能或兼容性问题,此时更推荐使用专门的图像处理库

三、实战 Demo

基础用法:加载、创建和保存

using System;
using System.Drawing;
using System.Drawing.Imaging;
class BitmapBasicDemo
{static void Main(){string sourcePath = @"C:\images\source.jpg";string createdPath = @"C:\images\created.bmp";try{// 1. 加载已有图片(从文件加载)// 使用using语句自动释放资源,避免内存泄漏using (Bitmap loadedBmp = new Bitmap(sourcePath)){Console.WriteLine($"加载的图片尺寸:{loadedBmp.Width}x{loadedBmp.Height}");}// 2. 创建新图片(在内存中创建一个200x200的位图)// 参数:宽度、高度、像素格式(这里用32位ARGB,支持透明通道)using (Bitmap createdBmp = new Bitmap(200, 200, PixelFormat.Format32bppArgb)){// 可以对创建的图片做些简单处理,比如填充背景色using (Graphics g = Graphics.FromImage(createdBmp)){g.Clear(Color.White);  // 填充白色背景}// 3.保存图片createdBmp.Save(createdPath);Console.WriteLine("新图片创建并保存成功");}}catch (Exception ex){Console.WriteLine(
http://www.xdnf.cn/news/1255555.html

相关文章:

  • GPT-5 将在周五凌晨1点正式发布,王炸模型将免费使用??
  • 【R语言】 高清美观的 MaxEnt 刀切图(Jackknife)绘制——提升论文质量
  • 从Text2SQL到Text2Metrics:衡石指标管理技术跃迁
  • 网页前端CSS实现表格3行平均分配高度,或者用div Flexbox布局
  • 92-基于Django的豆瓣图书推荐系统的设计与实现
  • 六边形架构模式深度解析
  • 解锁高效开发:AWS 前端 Web 与移动应用解决方案详解
  • 探究 ASGI 的技术优势:现代 Web 开发的新方向
  • Docker可用镜像(长期免费)
  • 从Centos 9 Stream 版本切换到 Rocky Linux 9
  • C++ - 仿 RabbitMQ 实现消息队列--案例
  • SQL注入攻击基础
  • HashMap寻址算法
  • FPGA学习笔记——SPI通讯协议简介
  • 【数据结构】排序(sort) -- 交换排序(冒泡快排)
  • 使用 Tauri 开发 Android 应用:环境搭建与入门指南
  • SkyWalking-1--SkyWalking是什么?
  • 快速搭建开源网页编辑器(vue+TinyMCE)
  • 【RabbitMQ面试精讲 Day 13】HAProxy与负载均衡配置
  • 深度学习的视觉惯性里程计(VIO)算法优化实践
  • 七、Linux Shell 与脚本基础
  • C语言memmove函数详解:安全高效的内存复制利器
  • 使用Spring Boot + Angular构建安全的登录注册系统
  • 自动化办公革命:3小时完成8小时工作量
  • 每日算法刷题Day58:8.7:leetcode 单调栈5道题,用时2h
  • Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”
  • 超高车辆如何影响城市立交隧道安全?预警系统如何应对?
  • 鸿蒙网络编程系列61-仓颉版基于TCP实现最简单的HTTP服务器
  • 计算机网络:固定网络位长度子网划分flsm和可变长子网掩码划分vlsm的区别
  • 【C++】哈希表原理与实现详解