2012-04-04 12 views
5

Rysuję obraz przy użyciu danych pikseli rgb. Muszę ustawić przezroczysty kolor tła dla tego obrazu. Jaką wartość mogę ustawić dla alfa jako przezroczystego obrazu? Czy jest jakieś inne rozwiązanie tego problemu?HTML5 jak narysować przezroczysty obraz piksela na płótnie

+0

powiązane: http://stackoverflow.com/questions/2916938/how-to-draw-transparent-image-with-html5-canvas-element – Nobita

Odpowiedz

7

Jeśli rozumiem, czego potrzebujesz, zasadniczo chcesz zmienić określone kolory na obrazie przezroczystym. Aby to zrobić, musisz użyć getImageData check out mdn for an explanation on pixel manipulation.

Herezje niektóre przykładowy kod

var imgd = ctx.getImageData(0, 0, imageWidth, imageHeight), 
    pix = imgd.data; 

for (var i = 0, n = pix.length; i <n; i += 4) { 
    var r = pix[i], 
     g = pix[i+1], 
     b = pix[i+2]; 

    if(g > 150){ 
     // If the green component value is higher than 150 
     // make the pixel transparent because i+3 is the alpha component 
     // values 0-255 work, 255 is solid 
     pix[i + 3] = 0; 
    } 
} 

ctx.putImageData(imgd, 0, 0);​ 

And a working demo

Z powyższego kodu można sprawdzić na fuschia za pomocą

if(r == 255 && g == 0 && b == 255)

+0

Po narysowaniu obrazu w pikselach, muszę przenieść ten obraz na zdarzenie mousemove. Kiedy poruszam ten obraz, widzę biały prostokąt wokół tego obrazu. Muszę tego uniknąć. Czy jest jakiś sposób na przeniesienie tego samego obrazu zamiast prostokąta pikseli? – Joe

+0

Trzeba by zrobić powyższe, z wyjątkiem szukania pikseli, które mają rgb 255,255,255 (biały). Spójrz na jsfiddle, tworzy element tymczasowy i rysuje na nim wyniki. Trzeba to zrobić. Mógłbyś manipulować pikselami i użyć 'putImageData' do umieszczenia danych na nowym płótnie, i to jest to, co chciałbyś przenieść zamiast obrazu. – Loktar

+1

Po narysowaniu obrazu na elemencie tymczasowym użyłem poniższego kodu, a mój problem został rozwiązany. Dziękuję za pomoc. var imgURL = tempCanvas.toDataURL(); var myImage = new Image(); myImage.src = imgURL; context.drawImage (myImage, xPos, yPos); – Joe

0

alfa 0 wskazań, że piksel jest całkowicie przezroczysty, wartość alfa wynosząca 255 jest całkowicie nieprzejrzysta, co oznacza, że ​​nie będzie przezroczysty.

jeśli części obrazu są całkowicie przezroczyste (wartość alfa równa 0), nie ma znaczenia, co użyjesz dla wartości RGB, o ile użyjesz alfa 0. Na bocznym notatniku niektóre starsze programy Windows, które ja zastosowali się do założenia takiego jak górny lewy piksel lub prawy dolny piksel ma być użyty jako kolor przezroczystości. Następnie przeliczy wszystkie piksele i ustawi wartość alfa na 0, gdy napotka określoną wartość RGB.

Jeśli użyjesz alfa 127, a obraz pojawi się na innym obrazie, będzie wyglądać, że oba obrazy są jednakowo widoczne lub że dolny obraz krwawi 50% swoich kolorów do najwyższego obrazu.

Ustaw zmienną dla alfa, jeśli chcesz przetestować i zobaczyć, jak wygląda po zastosowaniu go do całego obrazu.

+0

Po ustawieniu 0 dla alfa we wszystkich pikselach, moja część obrazu całkowicie się obraca do białego. – Joe

Powiązane problemy