Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 08.03.2010, 18:59 Titel: Alphakanal auslesen mit Peek |
|
|
Hallo , wie kann man den Alphakanl auslesen vom Png-Bild, welches in einem Imagecreate-Image reingepackt wurde.
In Freebasic werden ja für ein Bildpixel 4-Byte abgelegt.
Nun möchte ich wissen, ob unter dem Pixel x/y rgb(255,0,0) vom Png-Image der Alphapixel schwarz oder weiss ist.
Und wie kann man einen Alphakanal anfertigen bzw in einem Imagecreate-Image reinpoken als 4. Bytes?
Wie geht da?
Danke.
Gruss |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 08.03.2010, 19:54 Titel: |
|
|
Alphakanal auslesen sollte eigentlich mit COLOR als Funktion gehen, habe ich aber nicht getestet. An sich würde ich erwarten, dass man ebenso mit COLOR zusätzlich den Alphakanal setzen kann; in der deutschen Referenz steht allerdings nichts dazu. Also einfach mal testen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 08.03.2010, 20:03 Titel: |
|
|
Wie bohre ich ein Loch mit einer Säge?
Wie geht dem?
Grus. |
|
Nach oben |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 08.03.2010, 20:39 Titel: |
|
|
Ich möchte den 4. Kanal überprüfen ob er gesetzt (0/1) ist , bei einer bestimmten x/y-Position und dann prüfen ob da sich ein Farbpixel befindet.
Der 4. Kanal soll für eine Pixelcollision herhalten
Das wird wohl mit Color und dem anderen Spektakel zu langsam sein. Wollte es dann mit Peeks probieren.
Gruss |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 09.03.2010, 03:53 Titel: |
|
|
Die einzelnen Werte mit Peek auslesen recht simple, und bevorzuge ich persoenlich selbst um nicht unmengen sinnloser nebenvariablen zu casten
Benoetigen tust du dafuer nur die Vorbedingung, ein 32bit ImageBuffer
die horizontale (X) und die vertikale (Y) und den pitch, der im imageheader steht.
bsp. mit peek auslesen:
Code: | ImagePitch=Peek(UInteger,Image+16)) |
die adresse des pixels ist dann:
Code: | Image+32+(X*4)+(Y*ImagePitch) |
32 wegen des Headers
X*4, da jeder pixel 4 Byte informationen hat
und Y*ImagePitch erklaert sich eigentlich von selbst....
also kann man nun so jeden einzelnen wert auslesen:
Code: |
Alpha=Peek(UByte,Image+32+(X*4)+(Y*ImagePitch)+3)
Red=Peek(UByte,Image+32+(X*4)+(Y*ImagePitch)+2)
Green=Peek(UByte,Image+32+(X*4)+(Y*ImagePitch)+1)
Blue=Peek(UByte,Image+32+(X*4)+(Y*ImagePitch)+0)
|
Mit einer UDT wuerde es noch einfacher gehen...
Code: | Type PixelMap
Blue as UByte
Green as UByte
Red as UByte
Alpha as UByte
End Type
Peek(PixelMap,Image+32+(X*4)+(Y*ImagePitch))
|
solltest dir in der referenz auch mal die RGBA Funktion und die Internen Pixelformate ansehen _________________
 |
|
Nach oben |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 09.03.2010, 23:52 Titel: |
|
|
Jup, danke.
Lässt sich gut testen.
Gruss |
|
Nach oben |
|
 |
|