C# new Bitmap(32043, 32043, PixelFormat.Format32bppArgb)報錯:參數無效,如何將圖像分塊化處理?

????????C#處理非常大的圖像(如 32043x32043 像素)時,確實需要采取分塊化處理的方法來避免內存不足的問題。分塊化處理可以將大圖像分割成多個較小的塊,分別進行處理和保存,最后再合并這些塊以形成完整的圖像。以下是一個詳細的示例,展示如何在C#中使用 System.Drawing 和 Bitmap 類來實現這一目標。

  • 步驟

????????定義塊大小:選擇合適的塊大小,確保每個塊可以在內存中處理。
????????創建和處理塊:遍歷整個圖像區域,逐塊創建、處理并保存每個塊。
????????合并塊:如果需要,可以將這些塊合并成一個完整的圖像文件。

  • 示例代碼

????????以下是一個完整的示例代碼,展示了如何將大圖像分塊化處理:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;class Program
{static void Main(){int width = 32043;int height = 32043;int chunkSize = 8192; // 每個塊的大小,可以根據內存情況調整string outputFolder = "./chunks";string outputFile = "./output/large_image.png";// 創建輸出文件夾Directory.CreateDirectory(outputFolder);// 分塊處理圖像ProcessImageInChunks(width, height, chunkSize, outputFolder);// 合并塊(可選)MergeChunksIntoSingleImage(width, height, chunkSize, outputFolder, outputFile);}static void ProcessImageInChunks(int width, int height, int chunkSize, string outputFolder){for (int y = 0; y < height; y += chunkSize){for (int x = 0; x < width; x += chunkSize){int chunkWidth = Math.Min(chunkSize, width - x);int chunkHeight = Math.Min(chunkSize, height - y);using (Bitmap chunk = new Bitmap(chunkWidth, chunkHeight, PixelFormat.Format32bppArgb)){// 處理每個塊(例如,填充顏色)using (Graphics g = Graphics.FromImage(chunk)){g.Clear(Color.White); // 設置背景顏色// 可以在這里添加更多的圖像處理邏輯}// 保存塊到文件string chunkFileName = $"{outputFolder}/chunk_{x}_{y}.png";chunk.Save(chunkFileName, ImageFormat.Png);Console.WriteLine($"Saved chunk: {chunkFileName}");}}}}static void MergeChunksIntoSingleImage(int width, int height, int chunkSize, string inputFolder, string outputFile){using (Bitmap finalImage = new Bitmap(width, height, PixelFormat.Format32bppArgb)){for (int y = 0; y < height; y += chunkSize){for (int x = 0; x < width; x += chunkSize){int chunkWidth = Math.Min(chunkSize, width - x);int chunkHeight = Math.Min(chunkSize, height - y);string chunkFileName = $"{inputFolder}/chunk_{x}_{y}.png";using (Bitmap chunk = new Bitmap(chunkFileName)){using (Graphics g = Graphics.FromImage(finalImage)){g.DrawImage(chunk, new Rectangle(x, y, chunkWidth, chunkHeight));}}}}// 保存最終圖像finalImage.Save(outputFile, ImageFormat.Png);Console.WriteLine($"Merged image saved to {outputFile}");}}
}

解釋

  • 定義參數:

????????width 和 height:圖像的總尺寸。
????????chunkSize:每個塊的大小,可以根據可用內存調整。
????????outputFolder:保存塊的文件夾。
????????outputFile:合并后的完整圖像文件路徑。

  • 創建輸出文件夾:

????????使用 Directory.CreateDirectory(outputFolder) 創建保存塊的文件夾。

  • 分塊處理圖像:

????????ProcessImageInChunks 方法遍歷整個圖像區域,逐塊創建、處理并保存每個塊。
????????每個塊的寬度和高度根據剩余的圖像尺寸計算。
????????使用 Graphics 對象處理每個塊(例如,填充顏色)。
????????將每個塊保存為單獨的 PNG 文件。

  • 合并塊:

????????MergeChunksIntoSingleImage 方法遍歷所有塊,并將它們合并成一個完整的圖像。
????????使用 Graphics 對象將每個塊繪制到最終圖像上。
????????保存合并后的完整圖像。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78278.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何使用極狐GitLab 的外部狀態檢查功能?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 外部狀態檢查 (ULTIMATE ALL) pending 狀態引入于極狐GitLab 16.5 pending 狀態檢查的超時時間為兩分鐘引入于極狐GitLab 16…

深入探索Spark-Streaming:從Kafka數據源創建DStream

在大數據處理領域&#xff0c;Spark-Streaming是一個強大的實時流處理框架&#xff0c;而Kafka作為高性能的分布式消息隊列&#xff0c;二者結合能實現高效的數據處理。今天就來聊聊Spark-Streaming中從Kafka數據源創建DStream的相關知識。 早期&#xff0c;Spark-Streaming通過…

Kafka 詳解

1.基本概念&#xff1a;Kafka 是分布式發布 - 訂閱消息系統&#xff0c;具有高吞吐量、可擴展性等優勢&#xff0c;支持點對點和發布訂閱兩種消息模式&#xff0c;涉及 Broker、Topic、Partition 等多種角色。 2.安裝步驟&#xff1a;需先安裝 JDK 和 Zookeeper&#xff0c;下…

uniapp-商城-34-shop 購物車 選好了 進行訂單確認整體

在shop頁面選中商品添加到購物車&#xff0c;可選好后&#xff0c;進行確認和支付。具體呈現在shop頁面。 1 購物車欄 shop頁面代碼&#xff1a; 購物車代碼&#xff1a; 代碼&#xff1a; <template><view><view class"carlayout"><!-- 車里…

數據倉庫是什么?數據倉庫架構有哪些?

目錄 數據倉庫是什么&#xff1f;數據倉庫架構有哪些&#xff1f; 一、數據倉庫是什么&#xff1f; 二、數據倉庫的架構分層 1. 獲取層 2. 數據層 3. 應用層 4. 訪問層 三、數據倉庫的價值體現 1.決策支持 2.業務優化 3.提升競爭力 四、數據倉庫的未來發展趨勢 總…

單片機——使用printf調試

配置printf()輸出函數 1、來自于<stdio.h> 2、運行C語言時&#xff0c;輸出到終端 3、單片機沒有終端&#xff0c;需要使用串口&#xff0c;將要輸出的內容傳到電腦&#xff08;串口調試助手&#xff09;上 例子如下 #include <stdio.h> #include &qu…

人臉識別考勤系統實現教程:基于Face-Recognition、OpenCV與SQLite

引言 隨著人工智能技術的飛速發展&#xff0c;人臉識別技術已廣泛應用于安防、金融、教育等多個領域。本文將帶領大家利用Python的face-recognition庫、OpenCV和SQLite數據庫&#xff0c;從零開始構建一個具備異常報警功能的人臉識別考勤系統。該系統能夠實時檢測視頻流中的人…

親測成功???Linux下編譯opencv-4.10.0(靜態鏈接庫和動態鏈接庫)

1. 安裝依賴 在編譯之前&#xff0c;確保系統中安裝了必要的依賴工具和庫。運行以下命令安裝&#xff1a; sudo apt update sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config sudo apt-get install libavcodec-dev libavforma…

windows 部署Prometheus+Node-expoter

Prometheus v3.2.1 離線部署方式 通過helm部署prometheus會自動部署Node-expoter只需要添加prometheus的抓取規則&#xff01;&#xff01; 刪除&#xff1a; 清除之前安裝的 Prometheus 如果你之前已經安裝了 Prometheus&#xff0c;需要清除原有的 Prometheus 安裝&#xf…

HTMLCSS實現網頁輪播圖

網頁中輪播圖區域的實現與解析 在現代網頁設計中&#xff0c;輪播圖是一種常見且實用的元素&#xff0c;能夠在有限的空間內展示多個內容&#xff0c;吸引用戶的注意力。下面將對上述代碼中輪播圖區域的實現方式進行詳細介紹。 一、HTML 結構 <div class"carousel-c…

Linux:進程的概念

基本概念 課本概念&#xff1a;程序的一個可執行實例&#xff0c;正在執行的程序。 內核觀點&#xff1a;擔當分配系統資源實體。 當操作系統要執行程序時&#xff0c;也就是說操作系統要執行代碼&#xff0c;但一個操作系統需要執行多個程序&#xff0c;而CPU只有一塊&#xf…

前端基礎之《Vue(10)—過濾器》

一、過濾器 1、作用 用于數據處理。 2、全局過濾器 使用Vue.filter(名稱, val>{return newVal})定義。 在任何組件中都可以直接使用。 3、局部過濾器 使用選項&#xff0c;filters: {}定義&#xff0c;只能在當前組件中使用。 4、過濾器在Vue 3.0中已經淘汰了 5、過濾器…

平板電腦做歐盟網絡安全法案(EU)2022/30

平板電腦做歐盟網絡安全法案&#xff08;EU&#xff09;2022/30 平板電腦做EN18031,平板電腦做無障礙法規EU2019/882 歐盟委員會于2022年通過補充授權法案 &#xff08;EU&#xff09; 2022/30&#xff0c;明確要求無線電設備需滿足網絡安全、隱私保護及反欺詐要求。 新規時間軸…

Unity中打可選擇的AssetBundle,以及URP中加載AssetBundle包Shader丟失問題顯示洋紅色的解決方案

在上一篇打AssetBundle中已經實現了簡單的打AB包和加載,《Unity中打包AssetBundle并加載》,本篇筆記是進一步上一篇最后提出的問題,進行優化。 一、打可選擇的AssetBundle 每次打包都會把設置了AssetBundle名稱和后綴的所有文件都打包,這也是現在網上教學最多的 但是有時…

解決cannot find attribute `serde` in this scope記錄

問題描述&#xff1a; 在Rust中使用serde做json序列化&#xff0c;需要對一個字段指定序列化方法&#xff0c;添加serde注解后報錯: error: cannot find attribute serde in this scope --> src\models\order_model.rs:38:7 | 38 | #[serde(deserialize_with &qu…

基于whisper和ffmpeg語音轉文本小程序

目錄 一、環境準備 ? 第一步&#xff1a;安裝并準備 Conda 環境 ? 第二步&#xff1a;創建 Whisper 專用的 Conda 虛擬環境 ? 第三步&#xff1a;安裝 GPU 加速版 PyTorch&#xff08;適配 RTX 4060&#xff09; ? 第四步&#xff1a;安裝 Whisper 和 FFMPEG 依賴 ?…

Linux GPIO驅動開發實戰:Poll與異步通知雙機制詳解

1. 引言 在嵌入式Linux開發中&#xff0c;GPIO按鍵驅動是最基礎也最典型的案例之一。本文將基于一個支持poll和異步通知雙機制的GPIO驅動框架&#xff0c;深入剖析以下核心內容&#xff1a; GPIO中斷與防抖處理環形緩沖區設計Poll機制實現異步通知(SIGIO)實現應用層交互方式 …

【最新版】西陸健身系統源碼全開源+uniapp前端

一.系統介紹 一款基于UniappThinkPHP開發健身系統&#xff0c;支持多城市、多門店&#xff0c;包含用戶端、教練端、門店端、平臺端四個身份。有團課、私教、訓練營三種課程類型&#xff0c;支持在線排課。私教可以通過上課獲得收益&#xff0c;在線申請提現功能&#xff0c;無…

濟南國網數字化培訓班學習筆記-第二組-6-輸電線路現場教學

輸電線路現場教學 桿塔組裝 角鋼塔 角鋼-連扳-螺栓 螺栓&#xff08;M&#xff09;&#xff1a; 腳釘-螺栓&#xff08;螺栓頭-無扣長-螺紋-螺帽&#xff09;-墊片-螺帽/防盜帽/防松帽M20*45 表示直徑20mm&#xff0c;長度45mm螺栓級別由一個類似浮點數表示&#xff0c;如…

抖音的逆向工程獲取彈幕(websocket和protobuf解析)

目錄 聲明前言第一節 獲取room_id和ttwid值第二節 signture值逆向python 實現signature第三節 Websocket實現長鏈接請求protubuf反序列化pushFrame反序列化Response解壓和反序列化消息體Message解析應答ack參考博客聲明 本文章中所有內容僅供學習交流使用,不用于其他任何目的…