一文读懂 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.pswp.cn/pingmian/92216.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92216.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92216.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

预约时间组件

效果图如何使用<template><view><button click"pickerTime(0)">预约时间0</button><button click"pickerTime(1)">预约时间1</button><button click"pickerTime(2)">预约时间2</button><but…

Android 开发 - Service、Camera、Layout Design 自定义设备类型和大小

一、Service 启动 1、基本介绍 &#xff08;1&#xff09;startService()其他组件通过调用 startService() 启动 Service 后&#xff0c;Service 可在后台无限期运行&#xff0c;即使启动 Service 的组件被销毁也不受影响&#xff0c;一般情况下 startService() 是执行单一操作…

Qwen Image:开源中文渲染SOTA,重塑文生图技术边界

1. Qwen Image的技术定位与行业痛点1.1 文本渲染&#xff1a;文生图领域的长期技术瓶颈传统文生图模型在图像美学与真实感优化上已取得显著进展&#xff0c;但多语言文本渲染始终是行业难以突破的瓶颈。主流模型在处理中文等非字母语言时&#xff0c;常出现字符断裂、布局错位、…

Docker入门教程:在腾讯云轻量服务器上部署你的第一个容器化应用 (2025)

更多云服务器知识&#xff0c;尽在hostol.com“在我电脑上明明是好的啊&#xff01;”这句话&#xff0c;是不是堪称程序员“甩锅”排行榜第一名的金句&#xff1f;当你辛辛苦苦开发完一个应用&#xff0c;把它交给同事或者部署到服务器上时&#xff0c;却发现因为它依赖的某个…

DevOps平台结合Gradle实现打包流水线

在现代软件开发中,持续集成与持续交付(CI/CD)已成为团队提速、降本增效的核心实践。Gradle作为强大的自动化构建工具,常被用于Android与Java项目的构建打包任务。而将Gradle集成进企业的DevOps平台中,不仅可以标准化构建过程,还能自动化打包、测试、发布的全流程,大幅提…

Node.js 操作 MySQL

目录 一、什么是 MySQL&#xff1f; 二、MySQL 的功能概览 三、MySQL 的安装与启动 安装 MySQL 启动服务 四、Node.js 如何连接 MySQL&#xff1f; 使用 mysql2 模块&#xff08;推荐&#xff09; 建立连接 五、创建数据表和插入数据&#xff08;SQL 初始化&#xff09…

解锁高效敏捷:2025年Scrum项目管理工具的核心应用解析

一、为什么Scrum团队需要专业项目管理工具&#xff1f;在敏捷开发实践中&#xff0c;Scrum框架虽然提供了基础的工作流程&#xff0c;但缺乏对任务细粒度管理的支持。传统白板或简单看板工具往往无法满足现代敏捷团队的需求&#xff0c;导致&#xff1a;冲刺规划混乱&#xff1…

途游大数据面试题及参考答案

Java 的反射机制是什么?主要应用在哪些场景? Java的反射机制是指程序在运行时,能够获取自身类的信息(如类名、属性、方法、构造器等),并动态操作这些信息的能力。正常情况下,Java代码编译时类型已确定,而反射打破了这种编译期约束,让程序在运行时灵活操作类和对象。 …

贪心+矩阵算法

贪心算法贪心的本质是&#xff1a;选择每一阶段的局部最优&#xff0c;从而达到全局最优做题的时候&#xff0c;只要想清楚 局部最优 是什么&#xff0c;如果推导出全局最优&#xff0c;其实就够了。买卖股票的最佳实际思路&#xff1a;如果第i天卖出股票&#xff0c;则最大利润…

STM32U5 周期性异常复位问题分析

关键字&#xff1a; Option Bytes, IDWG 1. 问题背景 客户反馈使用 NUCLEO_STM32U575 进行评估时&#xff0c;发现板子烧录完程序后&#xff0c;能看到指示程序运行的 LED 灯正常点亮&#xff0c;但是程序跑不起来。仔细观察 LED 指示灯&#xff0c;并不是常亮而是出现周期性…

RedisBloom使用

安装RedisBloom模块&#xff0c;从git获取对应的原码&#xff0c;make生成.so文件&#xff0c;挂载.so文件&#xff0c;启动redis docker run --name test-redis -v /iothub/test-redis/data:/data -v /iothub/test-redis/modules:/modules -p 6378:6379 -d redis:4.0.10 redis…

ADC、Flash、SPI、watchdog

ADCADC(Analog-to-Digital Converter), 即模拟信号 - 数字信号转换器在STM32F103C8T6中, 同样具有ADC功能.以我们的芯片为例, 也存在2个片上外设ADC, 即ADC1和ADC2, 这两个ADC片上外设都挂载在APB2总线上.我们的ADC片上外设, 是一种具有12位逐次逼近型ADC,ADC转换的本质是不断的…

冷库设备远程监控物联网+省电节能解决方案

随着生鲜电商、医药冷链、跨境物流等行业的爆发式增长&#xff0c;我国冷库容量激增&#xff0c;但传统冷库管理模式正面临严峻挑战。据统计&#xff0c;国内冷链运输损耗率高达12%-15%&#xff0c;其中因温度失控导致的货损占比超60%。在某医药企业冷库事故中&#xff0c;因制…

如何开发一个运行在windows系统服务器上的服务

第一步&#xff1a;vs2022创建一个windows服务项目第二步&#xff1a;从工具箱拖拽出一个timer第三步&#xff1a;按下图所示进入&#xff0c;开始编辑业务逻辑下面给个例子using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; …

本地组策略编辑器无法打开(gpedit.msc命令异常)

一、本地组策略编辑器打开方式1、直接搜索打开&#xff08;1&#xff09;在搜索栏中直接输入以下内容进行搜索本地组策略编辑器&#xff08;2&#xff09;搜索到后直接点击打开即可&#xff08;但是一部分同志无法搜索到&#xff0c;搜索到的内容基本都是网页信息而非本地系统的…

kafka部署集群模式

Kafka部署&#xff08;3.7&#xff09; 生产环境推荐的kafka部署方式为operator方式部署&#xff0c;Strimzi是目前最主流的operator方案。集群数据量较小的话&#xff0c;可以采用NFS共享存储&#xff0c;数据量较大的话可使用local pv存储 部署operator operator部署方式为he…

C语言中级_动态内存分配、指针和常量、各种指针类型、指针和数组、函数指针

0、前言&#xff1a; 动态内存分配是一个重要概念&#xff0c;要和静态数组对比着学习&#xff1b;指针和数组搭配在一起&#xff0c;让指针理解的难度上了一个台阶&#xff0c;尤其是二维数组搭配指针&#xff0c;要获取数组的值&#xff0c;什么时候“取地址”&#xff0c;什…

单变量单步时序预测:CNN-GRU卷积神经网络结合门控循环单元

目录预测效果1. **CNN-GRU的基本原理**2. **应用场景**3. **模型结构与实现**4. **优势与挑战**5. **相关研究与实现**6. **未来发展方向**结论代码设计预测效果 CNN-GRU卷积神经网络结合门控循环单元是一种结合了卷积神经网络&#xff08;CNN&#xff09;和门控循环单元&#…

MonoFusion 与 Genie 3

卡内基梅隆大学的研究者发明了一种叫 MonoFusion 的新技术&#xff0c;它能用很少的普通相机&#xff08;比如4个&#xff09;&#xff0c;就能拍出像电影特效一样细腻流畅的动态3D场景&#xff08;4D重建&#xff09;&#xff0c;比如弹钢琴、修自行车这种复杂动作&#xff0c…

kubernets命令行创建Token并附加权限给dashboard控制台登录

1、创建登录token kubectl create token default -n graph-node-test dgjeojrgopejgeropjgpsdjgerjglsdjfsjogjeojgeorjgortlfhj4yu493460uwperg3wef;lsj2y3r934tnrhifrlfe9t4h5tlhobdrmlgw485tw4yp653ut9ogogjerolj4w9erjgotj3fgjletyj49yr20o359truyo5u6908430jt5grjsdtgj49…