簡體   English   中英

如何在C#中創建256萬像素的圖像?

[英]How do I create a 256 megapixels image in C#?

我正在制作成像應用程序。 我需要一個16000 x 16000像素的圖像。 這並非不可能,因為在PhotoShop中我可以創建此圖像進行打印。 (56 x 56英寸,300dpi)

我正在使用此代碼:

Image WorkImage = new Bitmap(16000, 16000); 

這會生成"Invalid Parameter"異常,但不會生成9000 x 9000像素。

MSDN沒有說明構造函數中的限制。

我知道位圖對象中的數據在內存中,因為如果數組太大,它會拋出"Out Of Memory"異常,但情況並非如此。 我寧願在文件中管理這些數據,但我不知道如何。

謝謝。

Photoshop不會像您嘗試的那樣在連續的內存部分中分配巨大的圖像。 我在創建非常大的圖像時遇到了一些內存限制。

考慮細分圖像。 這有利於更好的內存管理。 如果編輯其中一個細分圖像,則無需更新整個圖像。


另外,每像素4字節的16000 x 16000大約是1 GB! 太大了 祝好運!

為什么不生成一堆較小的位圖? 例如16位圖是4k x 4k像素......?

哦,雖然可能不是你得到的異常的原因,但是有一些有趣的怪癖與大對象/ CLR大對象堆。 這可以在其他一些SO主題中介紹,您可能只是為了好玩而閱讀,因為您正在玩大塊內存...例如: 如何從多個托管應用程序的大對象堆LOH中獲取未使用的內存?

雖然我同意Charlie的說法,你可能最好使用幾個較小的位圖,我只是在我的32位Windows上使用2 GB RAM運行下面的代碼,並且需要一段時間才能完成,但我沒有收到任何錯誤。

var b = new Bitmap(16000, 16000);
Console.WriteLine("size is {0}x{1}", b.Width, b.Height);

真的,不介意位圖數據在哪里。 我只需要在輸出中使用16000 x 16000像素圖像的文件(TIFF)。 我認為我可以創建一個類(如何使用位圖類和圖像類),但是使用文件本身中的數據,我可以在其中編輯圖像。

我正在考慮檢查TIFF結構並創建一個類來創建和編輯部分緩沖在內存中的文件。 我不想創建一個比幾MB大的對象。

但我想知道是否有一些具有BMP或TIFF文件編輯功能的課程......我真的不知道。

感謝您之前的答案。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM