2016-06-04 6 views
1

Ich habe eine Leinwand. Die Leinwand ist w Pixel breit und h Pixel hoch.Überprüfen Leinwand Segment für Transparenz

Es ist ein Bild auf der Leinwand.

Gibt es ein Pixel (oder mehr) mit einer Opazität von weniger als 1,0 zwischen den beiden Punkten (a,b) und (c,d)?

Es spielt keine Rolle, ob es ein (halb-) transparentes Pixel gibt oder ob es hundert gibt. Ein einfacher true oder false Wert wird ausreichen.

Die Leistung spielt keine große Rolle (da dies nur einmal ausgeführt wird, wenn die Seite geladen wird, für etwa 500.000 Pixel).

Wie findet man heraus?

+0

hallo, gab es ein Problem mit dem Code. aktualisierte Geige https://jsfiddle.net/f5b8o3hn/ – bfmags

+1

@bfmags hey, danke. Ich akzeptierte es vorher, da es mir gab, was ich brauchte, um die Aufgabe zu erfüllen :) – Lolums

Antwort

1

basierend auf Bresenham algorithm in Javascript

https://jsfiddle.net/f5b8o3hn/

function line(x0, y0, x1, y1){ 
    var dx = Math.abs(x1-x0); 
    var dy = Math.abs(y1-y0); 
    var sx = (x0 < x1) ? 1 : -1; 
    var sy = (y0 < y1) ? 1 : -1; 
    var err = dx-dy; 

    while(x0!=x1 || y0!=y1){ 

    var pixeldata = context.getImageData(x0, y0, 1, 1); 
    var data = pixeldata.data; 
    for (var i = 0, n = data.length; i < n; i += 4) { 
     if (data[i + 3] < 255) { 
      console.log(true); //true 
      break; 
     } 
     console.log(data[i + 3]); 
    } 

    var e2 = 2*err; 
    if (e2 >-dy){ err -= dy; x0 += sx; } 
    if (e2 < dx){ err += dx; y0 += sy; } 
    } 
} 

//pixeldata[0] Value of red in decimal (int between 0 and 255) 
//pixeldata[i+1] Value of green in decimal (int between 0 and 255) 
//pixeldata[i+2] Value of blue in decimal (int between 0 and 255) 
//pixeldata[i+3] Alpha Value (int between 0 and 255)