我想根據較小圖像的構成將圖像定位在另一圖像上。較小的圖像是較大圖像的切出部分,我需要將其精確定位在較大的圖像上,以使其看起來像單個圖像,但允許應用單獨的濾鏡和alpha。由於圖像不是簡單的矩形或圓形,而是複雜的衛星圖像,我不能簡單地用代碼重新繪製它們。我有相當多的圖像,因此不想手動找到每個圖像的位置,並在動作中手動設置它們。如果找到完美匹配,我有什麼辦法可以在較大的圖像上採樣一個5-10平方的小像素區域,並設置較小圖像的x值和y值?所有圖像都在一個數組中,並且已經設置了它們,我只需要一種方法來對像素進行採樣和匹配。我的第一個猜測是將圖像逐像素地向右和向下循環,覆蓋整個位圖並在找到匹配時移動到數組中的下一個孩子,將匹配的孩子留在發現完美匹配時的位置。比較兩個相互匹配的位圖匹配as3
回答
我希望我能正確理解你的問題。
可能有一個選項使用copypixels來實現你想要的。您可以使用bitmapdata.rect值來確定所需示例的大小,並使用矩形和移動點循環更大的位圖。讓我們看看我是否可以編碼...
function findBitmapInBitmap(tinyimg:BitmapData, largeimg:BitmapData):Point {
var rect:Rectangle = tinyimg.rect;
var xbound:uint = largeimg.rect.width;
var ybound:uint = largeimg.rect.height;
var imgtest:BitmapData = new BitmapData(tinyimg.rect.width, tinyimg.rect.height);
for (var ypos:uint = 0, y <= ybound, y++) {
for (var xpos:uint = 0, x <= xbound, x++) {
imgtest.copyPixels(largeimg, rect, new Point(xpos, ypos);
if (imgtest.compare(tinyimg) == 0) return new Point(xpos, ypos);
}
}
return new Point(-1,-1); // Dummy value, indicating no match.
}
沿着這些線應該工作 - 我敢肯定,代碼優雅和可能的優化的空間。但是,看起來像這種方法會很慢,因爲您必須檢查每個像素是否匹配。
有一個更好的方法。將您的大圖分割成圖層,並使用blitting技術在運行時將它們合成。在你的情況下,你可以創建一個沒有衛星的地面紋理,然後分別創建衛星,並使用copyPixels方法將它們放在任何你想要的地方。谷歌「在as3中傳輸」找到一些很好的教程。我目前正在研究使用這種技術的遊戲項目,這是一個非常好的方法。
祝你好運!
編輯:忘記在默認返回語句中的代碼。使用這種方法,你必須返回一個無效點(如(-1,-1)),並在函數外檢查它。或者,你可以將你的小位圖複製到函數中的大位圖,這會更合理,但我不知道你的要求。
在您回答之前,我剛剛完成了一些與此類似的事情。我進一步嘗試確保它的採樣點不是較小位圖中的空像素,因爲它們通常是不帶拐角的不規則形狀。謝謝一堆。 – NickCSE 2011-03-26 17:18:21
@ Shammr0ck嗯,你正在使用每像素的方法。如果你必須走這條路線,如果你的圖像支持透明度,你可以只檢查像素的第一個字節 - 如果第一個字節是0x00,則跳過檢查。這樣,你只會對顏色檢查顏色。不過,我仍然認爲,對於你似乎在做的事情,真正的blitting會是更好的答案,因爲你可以在幕後進行顏色更改,並放置圖像而不必擔心偏移和重疊。也許你可以詳細說明你的項目?聽起來很有趣。 – 2011-03-26 19:17:52
還沒有機會看blitting,所以我現在就把它留在它的位置。我正在爲不同的公司創建交互式地圖,並且不希望在主要主圖像的頂部加載外部圖像時手動設置圖像位置。我並沒有完全爲我的需求制定出完美的解決方案,因爲圖像是從主地圖中剪切出來的,圖像編輯器嘗試對它們進行反鋸齒,然後邊緣無法匹配原始圖像中的任何內容。我打算使用黑名單數組來防止檢查者匹配那個位置,如果找不到匹配的話。 – NickCSE 2011-03-26 20:01:22
對於實際比較,有BitmapData.compare,如果BitmapData對象是等效的,則返回數字0。
您需要在大圖像中找到像素序列。 BitmapData.getPixel
爲您提供像素值。因此,從小圖像中獲取第一個像素,找到大圖像,然後繼續比較,直到找到完全匹配。如果您在編碼時遇到麻煩,請隨時詢問。
這就是我的想法,但我不確定如何使它正常工作。我發佈了下面的內容。 – NickCSE 2011-03-25 15:35:13
- 1. 比較匹配和非匹配的兩個數據集
- 2. 比較兩個數組的匹配值
- 3. 如何比較兩個相同的表來匹配或不匹配行?
- 4. 比較和匹配圖像
- 5. 熊貓比較兩列匹配文本和打印全匹配的匹配
- 6. 匹配比較OCaml的
- 7. 嘗試比較兩個位置時不匹配
- 8. 模式匹配或比較兩個圖(折線圖)
- 9. 比較完成和部分匹配的兩個地圖的值
- 10. 比較兩個csv使用powershell並返回匹配和不匹配的值
- 11. 簡單匹配配對應用程序,比較兩個TextViews
- 12. SQL-比較列匹配集
- 13. String.equals比較匹配失敗
- 14. 細胞匹配和比較
- 15. SQL比較不匹配值
- 16. R:最佳匹配比較
- 17. Python - 列表比較/匹配
- 18. 比較兩個表格數據並顯示不匹配和匹配數據
- 19. 比較兩個文件並在匹配後用一些行打印匹配行
- 20. 比較兩列與其他兩列,並找到匹配以及不匹配
- 21. 比較兩張圖片/匹配一個複雜手勢
- 22. Nginx的位置相匹配
- 23. 匹配兩個圖像
- 24. 如何比較兩欄中數據匹配(或不匹配)的數據?
- 25. 比較哈希映射的匹配和不匹配
- 26. 在比較圖像之前匹配圖像位置
- 27. 按兩列匹配比較兩個文件
- 28. 比較兩個數組,並導致匹配的一個
- 29. EWS比較ItemID顯示不匹配,但ItemID.ToString比較顯示匹配。
- 30. 與兩個匹配和非匹配圖案至REGx圖案
爲什麼不發佈至少僞代碼爲你正在做什麼,並告訴我們什麼不按預期工作。 – jswolf19 2011-03-25 02:22:11