2016-03-15 67 views

回答

1

可能最快的方法是遍歷圖像並找到不是黑色的邊框像素。然後將圖像重新繪製到剪切由邊框像素接收的矩形的新上下文中。

通過邊界像素我的意思是最左邊,最頂部,最底部和最右邊。您可以找到一種方法從UIImage中獲取原始RGBA緩衝區,然後您可以通過該緩衝區遍歷寬度和高度,並在適當時設置邊界值。這意味着例如獲得leftMostPixel,首先將其設置爲某個較大值(或圖像寬度),然後在迭代中如果像素不是黑色,並且如果leftMostPixel > x則爲leftMostPixel = x

既然您有4個邊界值,您可以從中創建一個框架。要重新繪製目標矩形,您可以使用具有上下文的各種工具,但最簡單的方法是創建具有邊界矩形大小的視圖,並將原始圖像的大小放在圖像視圖上並創建視圖的屏幕截圖。儘管圖像視圖原點必須是減去有界矩形的原點(我們把它放在屏幕外)。

雖然您可能會遇到一些與圖像方向有關的問題。如果圖像的方向不同於up,那麼原始數據將不會考慮這一點。因此,在創建有界矩形時需要考慮這一點......或者先重新繪製圖像以使其正確定向......或者您甚至可以使用RGBA數據創建子緩衝區,並從這些數據創建CGImage並應用與輸入一樣,輸出爲UIImage

所以在獲得邊界後,有很多程序。有些更慢,有些需要更多的內存,有些只是很難編碼,並有邊緣情況。

+0

謝謝你解釋答案馬蒂奇。如果你能讓我知道可以使用的步驟/函數(或者一些示例項目),例如如何遍歷圖像,我將不勝感激。即如何獲得其像素值?然後如何檢查它的像素是黑色的地方等。一些代碼片段將是巨大的幫助 –

+0

http://stackoverflow.com/questions/448125/how-to-get-pixel-data-from-a-uiimage- cocoa-touch-or-cgimage-core-graphics應該告訴你如何獲取RGBA數據; for循環在你的情況下應該是每個寬度和每個高度,而不是數。如果黑色像素的RGB分量爲零,則爲rawData [index] == 0,rawData [index + 1] == 0 ... –