2014-02-17 44 views

回答

2

您將不得不遍歷數組,因爲這是評估畫布中所有像素的唯一方法。

但是,您可以使用32位整數(類型)陣列,而不是標準的8位陣列 - 這將是快許多倍:

var idata = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height), 
    buffer32 = new Uint32Array(idata.data.buffer), 
    len = buffer32.length, 
    i = 0, x, y, 
    color = 0xffffffff; /// white color (ABGR format on little-endian systems) 

for(; i < len; i++) { 
    if (buffer32[i] === color) { 
     /// convert i to x/y position here 
     x = i % idata.width; 
     y = (i/idata.height)|0; 
    } 
} 
+0

你錯過了W和Y之間的逗號第一線。我需要使用顏色格式的ABGR,還是我可以使用標準的十六進制?除了'ctx'和我正在尋找的顏色之外,還有什麼我需要改變以使其適用於我?謝謝。 – Keavon

+0

@Keavon對於鍵入數組,您需要爲小端系統使用ABGR(十六進制表示中的0xAABBGGRR)(現在大多數主流系統都是小端序列,所以這不會有任何問題)。 RGBA適用於大端。這是因爲這些是低級別(類型)數組,並且不會有轉換(當然,如果您願意,您可以使用等效的十六進制值作爲32位整數)。除此之外,將x和y推到一個數組或創建一個對象,當你得到一個命中,你應該很好去! – K3N

+0

如果我不需要alpha,我可以使用BGR嗎?或者我只需要把00放在它的前面?我從來沒有真正聽說過ABGR。我只是簡單地添加00,然後是我的HEX代碼的最後兩個十六進制字符,然後是中間兩個,然後是前兩個? – Keavon