2012-12-12 27 views
0

我有一個應用程序,用戶在其中繪製圖片,然後將這些圖片轉換爲pdf。我需要能夠在轉換之前裁剪出空白。最初我跟蹤最高和最低的x和y值(http://stackoverflow.com/questions/13462088/cropping-out-whitespace-from-a-user-drawn-image)。這工作了一段時間,但現在我想給用戶擦除的能力。這是一個問題,因爲例如,如果用戶擦除邊界框將改變的最高點,但我不會新框的尺寸。當用戶被允許擦除時在用戶繪製的圖像中裁剪掉空白

現在我正在通過整個圖像逐像素地確定邊界框。這對於一張圖像來說並不差,但是我會達到70張,這對於70張來說太慢了。我也想過把每個像素都保留在一個數組列表中,但是我不認爲這樣會很好地工作。

有沒有一種算法可以幫我解決這個問題?也許已經內置了一些東西?速度對我來說比準確性更重要。如果每邊留下一些空白,它不會是一個悲劇。

非常感謝。

回答

0

您提到您正在跟蹤X和Y座標的最小值和最大值(這也是您在前面問題中選擇的解決方案)。

以類似的方式,你應該能夠找到爲消除區域的最小和最大X & Y座標,從擦除事件......

當用戶刪除圖像的一部分,你可以簡單地比較擦除部分的座標和實際圖像,找出最終的座標。

還有就是想看看2個矩形重疊的相關問題: Determine if two rectangles overlap each other?

可以使用類似的邏輯(儘管略有不同),並找出最終的最小/最大X & Y值。

+0

這不起作用。如果我抹掉最高點,圖片另一側的另一點可能會成爲最高點,它不一定是橡皮擦的底部。 – clavio

+0

你是對的,如果我們刪除邊緣始終平行於軸的假設,它可能無法正常工作。 – Amol

+0

我能想到的其他選項是將內存中的所有點保存在不同的冗餘數據結構中,以便可以快速添加/刪除它們。 您可以使用基於紅黑樹的TreeMap,以便在您的情況下可以將查找從O(n^2)更改爲O(log n)。您可以維護兩張地圖,一張查找最小/最大X,另一張查找最小/最大Y. 但您在該方法中保留3份相同點。添加/刪除一個點時,您也會產生一些額外的成本,但這本身可以忽略不計(log n)。如果你能忍受額外的記憶,這種方法應該可行。 – Amol