2011-11-18 59 views
4

我很新手動操作圖像,請耐心等待。有人能解釋矩陣(Mr.Anderson)嗎?

我有一個圖像,我允許用戶縮小/增長和移動。

基本行爲完美。但是,我需要能夠抓住「視口」(可見剪輯區域矩形)中的任何內容並將其另存爲一個單獨的位圖。

在我能做到這一點之前,我需要弄清楚圖像的實際位置和顯示內容。這比我想象的更加棘手。

我的問題是,矩陣文件是荒謬的模糊,我失去了我如何可以測量我的轉換圖像的座標和尺寸。正如我所看到的,即使用戶收縮/增長,圖像的X,Y也保持不變。所以,即使它報告在0,0時,它也顯示在(比如說)100,100處。我能得到這些座標的唯一方法就是做一個相當醜陋的計算(再次......我可能不是最優雅的方式,因爲幾何不是我的特長)。

我有點希望我失去了一些東西,並有一些方法來拉對象的自動翻譯的座標和尺寸。

在理想的世界中,我可以打電話給(僞)myImg.getDisplayedWidth()myImg.getDisplayedX()

哦,我應該補充一點,這可能都是一個問題,我通過使用圖像中心作爲增長/縮小點來引起我自己。如果我將默認的0,0座標作爲非變化點,我認爲無論它的大小如何,位置都是正確的。所以...也許所有這一切的答案是簡單地找出我的中心偏移並將其應用於我的翻譯?

所有幫助非常感謝(和人們不是隨意混淆我的問題的標題更是如此!)。

+0

澄清:您是否將Matrix應用於圖像以及原始圖像點?此外,這是'android.graphics.Matrix'或'android.opengl.Matrix'? – Bringer128

+0

我不確定我是否理解第一個問題。我沒有使用opengl。我有一個正在繪製到視圖中的畫布的位圖。視圖被設置爲一個佈局,其clipChildren設置爲「true」。我不知道「原始圖像點」是什麼意思。我自己放置圖像。目前,我必須翻譯必須移動圖像的位置,以便在視口中顯示圖像,因爲即便是以大約.3的比例顯示圖像。當我縮放圖像時,我在圖像中心使用了一個點,所以它從中間向外生長。 –

+0

因此,隨着它的增長,它被報告X,Y是靜態的,即使它的左上角在用戶捏合時移動。 –

回答

2

Matrix方法mapPoints(float[] dst, float[] src)可用於通過應用Matrix轉換來獲得一系列轉換點。或者(略)更多外行人的術語,Matrix類的一個實例不僅包含翻譯指令,還包含將矩陣轉換應用到一系列點的便利方法。所以在你的情況下,你只需要你未翻譯的位圖(x,y,寬度,高度)的角點,並將角點傳入該方法以獲得轉換的點。

+0

你搖滾。所以,我嘗試了RectF的風格,它正確地得到了x,y,但將w,h顯示爲0.我可以直接使用它(因爲只需將原始數據乘以原始數據即可輕鬆獲得真實寬度W *的比例尺,但我很好奇你將位圖傳遞到矩陣中的意思,我沒有看到簽名需要位圖參數,所以我不清楚你對我的意義不管怎樣,我會給你對號的,因爲你讓我有99%的回家的路。:) –

+0

@ Dr.Dredel糟糕,這是一種語法失敗。它應該是「他們」而不是「它」。現在看起來如何? – Bringer128

+0

@ Dr.Dredel當你構建你的RectF時,你是通過'new RectF(bitmapX,bitmapY,bitmapX + bitmap.getWidth(),bitmapY + bitmap.getHeight())'來獲得它嗎? – Bringer128