当前位置: 首页 > 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.dtcms.com/a/318811.html

相关文章:

  • 知识随记-----Qt 实用技巧:自定义倒计时按钮防止用户频繁点击
  • 3D 软件在游戏开发中的全链路应用:从原型到上线的实战解析
  • Docker Buildx最佳实践:多架构镜像构建指南
  • Mac/Windows跨平台PDF与AI高效解决方案
  • sigprocmask 函数深度解析
  • html页面使用jspdf预览及下载pdf模板
  • 使用驱动移除内核回调,
  • golang开源库之Syncthing
  • Unity URP渲染管线动态修改材质球状态
  • 基于 HT 引擎实现 3D 智慧物流转运中心一体化管控系统
  • 【CS创世SD NAND征文】小型夜灯为何需要存储芯片?从基础照明到智能存储的升级密码
  • 生成式AI时代,Data+AI下一代数智平台建设指南
  • EP04:【DL 第二弹】张量的线性代数运算
  • 内网穿透原理和部署教程
  • 京东关键字搜索商品列表接口开发实战:从参数优化到分布式调用
  • localforage的数据仓库、实例、storeName和name的概念和区别
  • VBA之Word应用第四章第一节:段落集合Paragraphs对象(一)
  • mysql全屏终端全量、部分备份、恢复脚本
  • 累加和校验原理与FPGA实现
  • 躺平发育小游戏微信抖音流量主小程序开源
  • 自建纯竞拍系统小程序需准备的事项
  • uniapp/uniappx实现图片或视频文件选择时同步告知权限申请目的解决华为等应用市场上架审核问题
  • TSMaster-C小程序使用
  • uni-app X能成为下一个Flutter吗?
  • Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD
  • MyBatis-Plus Service 接口:如何在 MyBatis-Plus 中实现业务逻辑层??
  • 阿里云部署若依后,浏览器能正常访问,但是apifox和小程序访问后报错链接被重置
  • [失败记录] 使用HBuilderX创建的uniapp vue3项目添加tailwindcss3的完整过程
  • [无需 Mac] 使用 GitHub Actions 构建 iOS 应用
  • vue3 el-select 加载内容后 触发事件