一文讀懂 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.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…