ReadPixelFast

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

TestServer

Betreff: ReadPixelFast

BeitragMi, Aug 06, 2008 11:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich habe ein Problem bei dieser Funktion:
Code: [AUSKLAPPEN]
Function Oben_Herab()

 P=0:I=0
 fertig=0
 LockBuffer FrontBuffer()

 While Not fertig<>0
   ppp=ReadPixel(0,0)
   pix=ReadPixel(P,I)
   If ReadPixelFast(0,0)<>ReadPixelFast(P,I) Then fertig=I
   P=P+1   
   If P>img_width  Then P=0:I=I+1
   If I>img_height Then fertig=-1
 Wend

 UnlockBuffer FrontBuffer()
 RuntimeError fertig

End Function

Das Problem ist, dass es schon beim zweiten Pixel (I=1) zurückgibt, dass fertig einen anderen Wert als 0 hat.
Mit der Funktion soll in einem Bild nach einer anderen Farbe gesucht werden und zwar Reihe für Reihe. Die Reihe, in der ein andersfarbiger Pixel ist, soll in der Variable fertig gespeichert werden!
Das Pixel in der linken oberen Ecke soll transparent sein.

Danke im voraus

TimBo

BeitragMi, Aug 06, 2008 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

sind die Variablen Img_widht und Img_hight global?
Wenn nicht, hat diese bei jedem aufruf der Funktion den Wert 0. Question

mfg
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

ToeB

Betreff: Re: ReadPixelFast

BeitragMi, Aug 06, 2008 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
TestServer hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
 ppp=ReadPixel(0,0)
   pix=ReadPixel(P,I)
   If ReadPixelFast(0,0)<>ReadPixelFast(P,I) Then fertig=I
 


Ich würd erstmal If ppp <> pix then fertig = I schreiben... sonst wird alles doppelt ausgelesen...
und dann ppp = ReadPixelFast(0,0) und pix = ReadPixelFast(P,I) Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

TestServer

BeitragMi, Aug 06, 2008 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
sind die Variablen Img_widht und Img_hight global?

Ja sind sie!

Zitat:
Ich würd erstmal If ppp <> pix then fertig = I schreiben... sonst wird alles doppelt ausgelesen...
und dann ppp = ReadPixelFast(0,0) und pix = ReadPixelFast(P,I)

Hab ich geändert, hatte ich eigentlich auch nur zum testen so.

TimBo

BeitragMi, Aug 06, 2008 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
 While Not fertig<>0


ist doch das gleiche wie

Code: [AUSKLAPPEN]
 While fertig=0
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

TestServer

BeitragMi, Aug 06, 2008 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja stimmt, das liefert aber auch nicht das gewünschte Ergebnis. Hier mal das bisschen Code, das ich bisher habe:
Code: [AUSKLAPPEN]
Graphics 1024,768,32
SetBuffer BackBuffer()

ClsColor 0,255,0

grafik=LoadImage("Gras_1.jpg")

Global img_width=ImageWidth(grafik)
Global img_height=ImageHeight(grafik)

Cls
DrawImage grafik,0,0
Flip

Global rgb = ReadPixelFast(0,0)
trans_r = (rgb Shr 16) And $FF
trans_g = (rgb Shr 8) And $FF
trans_b = (rgb) And $FF



Repeat
 Cls
 DrawImage grafik,0,0
 
 Color 255,255,255
 Text 750,10,"Bildlänge: "
 Text 750,20,"Bildhöhe:"
 Text 900,10,img_width
 Text 900,20,img_height
 Text 750,40,"Trans. Farbe:"
 Text 900,40,trans_r+", "+trans_g+", "+trans_b

  If MouseHit(2) Then Oben_herab

 Text 750,120,nix_oh

 Flip
Until KeyHit(1)




Function Oben_Herab()

 P=0:I=0
 fertig=0
 LockBuffer FrontBuffer()

 While fertig<>0
   ppp=ReadPixelFast(0,0)
   pix=ReadPixelFast(P,I)
   If ppp<>pix Then fertig=I
   P=P+1   
   If P>img_width  Then P=0:I=I+1
   If I>img_height Then fertig=-1
 Wend

 UnlockBuffer FrontBuffer()
 RuntimeError fertig

End Function


Ausserdem stimmt mir die Variable trans_b so nicht richtig!

Xeres

Moderator

BeitragMi, Aug 06, 2008 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Zeile "ppp=ReadPixelFast(0,0)" würd ich vor die schleife setzen, einmal auslesen reicht bei einem konstanten wert. Aber bei der Kompression von .jpg wirst du da kaum die Farbe wiederfinden die du suchst. Benutz eher .png, das speichert verlustfrei.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

TestServer

BeitragMi, Aug 06, 2008 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Geändert. Ich habe jetzt das Problem gefunden und behoben. Ist irgendwie ein wenig komisch, aber ich musste es jetzt so machen:
Code: [AUSKLAPPEN]
LockBuffer FrontBuffer()
Global rgb = ReadPixelFast(0,0)
trans_r = (rgb Shr 16) And $FF
trans_g = (rgb Shr 8) And $FF
trans_b = (rgb) And $FF
UnlockBuffer FrontBuffer()
MaskImage grafik, trans_r,trans_g,trans_b

Cls
Flip

LockBuffer FrontBuffer()
rgb = ReadPixelFast(0,0)
UnlockBuffer FrontBuffer()

Wenn das Bild schon so transparent geladen wird, schleichen sich keine Fehler ein und es funktioniert jetzt so wie es soll.

Vielen Dank für eure Hilfe.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group