2017-12-02 151 views
-1

我正在研究一個程序,根據輸入繪製,將不同顏色的形狀繪製到位圖文件上,如果我只需繪製一個形狀,它就可以很好地工作,但如果我例如採用兩個或更多形狀,它只是畫出舊照片,舊照片會丟失,但我需要它們疊加以創建更復雜的照片。有沒有辦法當我寫一個位圖文件跳過我不想寫的部分?我也嘗試製作一個數組,其中保存所有像素數據,但如果我根據數組元素類型的大小採用比800x800大的位圖,那麼該數組無法工作。任何建議和評論我都樂意接受。先謝謝你。在C中創建的位圖文件中覆蓋2個或更多形狀?

+0

800x800x3約爲2兆字節,您可能達到了堆棧限制。改爲在堆上分配數據。爲什麼不使用圖像庫或爲什麼不使用特定於操作系統的繪圖函數? –

+0

非常感謝,我沒有想過這個,對我來說很愚蠢,現在一切正常。我製作了一個像素結構數組併爲其分配了內存,並且它完美地工作。現在我只編輯我想編輯的數組中的像素,然後寫入實際的bimap文件。 – Enizimus

回答

0

您需要使用透明背景來繪製第二個圖形,您將如何完成該任務完全取決於您,因爲您沒有提供任何關於您使用的技術的信息。

+0

對不起,沒有提到所有的細節,我這樣做在C和只使用標準的C庫。我想通了,但我不知道該怎麼做才能獲得透明背景。謝謝。 – Enizimus

+0

您需要另一個位圖作爲掩碼。在該位圖中將值設置爲要繪製第二個形狀的所有1,其他位置爲0。最後,將第一次繪製的結果與第二次繪製的結果合併:res1 [i] =(res1 [i]&〜mask [i])| (res2 [i]&mask [i])。這裏'res1'是第一次繪製的結果,'res2'是第二次,'mask'是我描述的掩蔽位圖,'i'是像素索引,這將從第二次繪製發生的res2中選擇新值並且來自res1其他地方的現有價值。 – SoronelHaetir

相關問題