2012-10-31 53 views
0

的佈局:添加空格到圖像的頂部

我使用第三方控件掃描文檔。我有一個事件發生在我掃描圖像時(主要用於添加註釋圖像)。該活動僅爲我提供了一個名爲。PAhDC的房產。該屬性是在將圖像寫入文件之前存儲圖像的DC的句柄。因此,我可以在寫入文件之前更改圖像。

預期的結果:

我想簡單地增加一個1/4英寸(可以說100個像素)上的圖像的最頂端的空白行。如果我的原始圖像是200x200(WxH),那麼我的新最終圖像將需要200x300。

問題和其他的想法:

我怎樣才能改變現有的圖像時,僅知道它的DC處理?我正在考慮做類似以下的事情......

  1. 創建一個新的DC。
  2. 創建比原始圖像高100像素的新位圖。
  3. 在新的DC中使用該新位圖。
  4. 將原始圖像複製到新的位圖(從頂部100像素作爲起點)。
  5. 然後使用類似於SelectObject的東西來替換原來的hDC中的舊位圖和新的位圖,然後銷燬舊的位圖對象。

注意:我想盡可能使用MANAGED CODE來做到這一點。使用SelectObject()是我能想到的唯一方法,但它當然是非託管代碼...:/

回答

0

你不能沒有合作兼容與位圖和DC的所有者。

DeviceContext純粹是底層DIB /位圖上的視口,沒有尺寸或尺寸的概念(超出剪切區域)雖然可以創建新的位圖並將其選入DC,但很可能應用程序會忽略你所做的並使用它創建的DIB。 最終的結果將是GDI對象泄漏並且不會改變底層圖像。

要做你在問什麼,你需要與其他代碼充分合作,並且他們添加一個方法,允許你替換底層數據。

+0

我永遠無法得到它的工作,就像Deanna所說,無論我對DC中的位圖做了什麼(替換或不替換),我的更改都被忽略,因爲「新」位圖在父函數中被忽略...或者所以我猜測由於它適合我嘗試交換位圖時。 –

0

當然,您可以在託管代碼中執行此操作。所有P/Invoke聲明都可以從任何不錯的搜索引擎中隨時獲得。

  • 當創建一個新的DC,確保它與DC兼容原來的
  • 當創建一個新的位圖,確保它與DC
相關問題