2017-01-23 33 views
1

什麼是fastest & most efficient waySystem.Drawing.Image找到空(白)的空間? (有沒有必要說用LockBitsunsafe ...)如何找到快速的圖片空(f.i.白)空間

我的任務是通過不掩蓋現有的內容,找到位置place a rectangualr image into an existing image ...
在我的情況下,現有的圖像渲染圖像出來的PDF文件。

我的目標是將其他圖像最下端的可能位置,有足夠的空間: (綠色的在下面的例子中) Text as Image with white space

  • 難道是一個很好的decission到掃描每個像素並找到正確的位置?

  • 或者是有一個更有效的方法?也許可以使用網格並查找彙總值來評估小區域?

也許有人知道現有&快速算法,也可以提供一個例子代碼?
非常感謝!

+0

在您的示例中,您希望放置圖像的整個文檔是白色的。這是否始終如此,或者您可能需要將圖像放置在文本的右側或左側? – MrSmith42

+0

我預計在左邊也可能有內容...從buttom到top和從right到left的第一個可能位置(「像簽名」) – Cadburry

回答

0

我想你能避免試圖消除一些像素測試大面積掃描大多數像素。

讓圖像的寬度是WIDTH。 讓圖片的高度爲HEIGHT

您可以平鋪在尺寸的瓷磚文檔WIDTH/2 + 1HEIGHT/2 + 1像素。

只要有可能放置圖片,這將覆蓋這些磚完全的正好一個。

因此我的算法將是這樣的:布爾的

  1. 創建2D陣列(或類似的數據結構),爲每一瓦片的標記物是完全內。

  2. 遍歷所有的瓷磚。

  3. 對於每個圖塊檢查像素,直到您選中非白色像素(將圖塊標記爲不是白色),或者您已掃描所有像素(將圖塊標記爲白色)。要掃描一個瓷磚的像素,我會使用隔行模式,如png在交錯模式下使用。通過這種方式,你很有可能會幸運地找到一個非白色像素,其測試遠遠小於該圖塊的所有像素。
  4. 如果可以展開爲圖片的大小,請檢查每個白色圖塊(從左下角到右上角)。 (再次使用隔行掃描模式以最小化比較次數)