Farbe eines Pixels aus Graphics holen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

cike

Betreff: Farbe eines Pixels aus Graphics holen

BeitragMo, Jun 13, 2005 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht das?
Mein Spiel baut derzeit alles nur über den Plot-Befehl auf. Nun möchte ich aber die Farbe eines Pixel auf einer Stelle (x,y) wissen.
Wie stelle ich das mit BlitzMax an? Gibt es eine Funktion?

Bin für alle Antworten dankbar
mfg cike

.:BotC:. Pascal

BeitragMo, Jun 13, 2005 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, für BlitzMax ist das hier die falsche Abteilung.

Aber ich denke mal, dass es in Blitzmax auch die Befehle "Writepixel", "Writepixelfast", "Readpixel" und "Readpixelfast" gibt. Die solltest du die mal angucken.

(Wenns die nicht in BMax gibt, dann kann ich dir nicht helfen. Ich kenne mich mit BMax nämlich nicht aus.)
Repeat

Print "Uuuuh und das ist der Beweis, immer das selbe, alles dreht sich im Kreis."

Forever
 

Dreamora

BeitragMo, Jun 13, 2005 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~

falsches Board
Dreamora

Was die Frage betrifft:

Per GrabPixmap die Informationen auslesen, danach kannst du per ReadPixel die gewünschten Pixeldaten aus der Pixmap auslesen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Jan_

Ehemaliger Admin

BeitragDi, Jun 14, 2005 7:20
Antworten mit Zitat
Benutzer-Profile anzeigen
mit:
BlitzBasic: [AUSKLAPPEN]

Pixmap:Tpixmap=lockimage(image:Timage)
rgb=ReadPixel pixmap,x,y
unlockimage image
between angels and insects
 

Hammlet

BeitragFr, Jul 29, 2005 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir geht das nicht Crying or Very sad
Weiss jemand was am Folgenden Code nicht stimmt:
BlitzBasic: [AUSKLAPPEN]

Graphics 1024,768

Bild:Timage=LoadImage(\"bild.png\")

Repeat
Cls

mx=MouseX()
my=MouseY()

DrawImage bild,0,0

Pixmap:Tpixmap=LockImage(bild:Timage)
rgb=ReadPixel pixmap,mx,my
UnlockImage bild


Flip
Until KeyHit(27)
End
 

gamble

BeitragFr, Jul 29, 2005 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier's mal so:

Code: [AUSKLAPPEN]

Graphics 1024,768

Bild:Timage=LoadImage("bild.png")

Repeat
Cls

mx=MouseX()
my=MouseY()

DrawImage bild,0,0

Pixmap:Tpixmap=LockImage(bild)
rgb=ReadPixel pixmap,mx,my
UnlockImage bild


Flip
Until KeyHit(27)
End
 

Hammlet

BeitragFr, Jul 29, 2005 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
ändert leider nichts.
Es kommt folgende Fehlermeldung:

Compile Error
Unable to convert from 'Int(TPixnap.Int,Int)'to'Int'

und zwar an in der Zeile wo "rgb=ReadPixel pixmap,mx,my" steht.
 

Dreamora

BeitragFr, Jul 29, 2005 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
rgb=ReadPixel pixmap,mx,my

sollte

rgb=ReadPixel (pixmap,mx,my)

sein, da Funktionen/Methoden mit Rückgabewerten zwingend Klammern um die Parameter haben müssen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Suco-X

Betreff: .......

BeitragFr, Jul 29, 2005 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Nach deinem Threadtitel zufolge willst du ja die Informationen aus dem Hauptfenster entnehmen, hier eine weitere Lösung dafür

Code: [AUSKLAPPEN]

Strict

Graphics 800,600,0




Repeat
   Cls

   SetColor 255,0,0
   Plot 60,60

   Local r,g,b
   ColorOnPosition(60,60,r,g,b)

   SetColor 255,255,255
   DrawText "RED: "+r, 10,10
   DrawText "GREEN: "+g,10,30
   DrawText "BLUE: "+b,10,50


   Flip
   FlushMem()
Until KeyHit(KEY_ESCAPE)


Function ColorOnPosition(x:Int, y:Int, r:Int Var, g:Int Var, b:Int Var)
   Local TempPixmap:TPixmap = GrabPixmap(x,y,1,1)
   Local TempPtr:Byte Ptr = TempPixmap.PixelPtr(0,0)
   r = TempPtr[2]
   g = TempPtr[1]
   b = TempPtr[0]
End Function

Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Hammlet

BeitragFr, Jul 29, 2005 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
rgb=ReadPixel pixmap,mx,my

sollte

rgb=ReadPixel (pixmap,mx,my)

sein, da Funktionen/Methoden mit Rückgabewerten zwingend Klammern um die Parameter haben müssen.


Ich habe das mit den Klammern mal geändert, leider kommt jetzt noch ne andere Fehlermeldung:
Unhandlet Exception: Image frame cannot be locked

Edit:
Habe gerade die version von Suco-x probiert, und die funktioniert einwandfrei. Danke dir Very Happy

Suco-X

Betreff: .......

BeitragFr, Jul 29, 2005 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Die Version ist aber noch sehr langsam wenn du mehrere Pixel Abfragen willst. Je nach Situation kann ich dir also noch folgende Version anbieten:

Code: [AUSKLAPPEN]

Strict

Graphics 800,600,0

Local TempPixmap:TPixmap


Repeat
   Cls
   
   
   SetColor 255,0,0
   Plot 100,100
   
   
   Local r,g,b
   ColorOnPosition(100,100,r,g,b, False)


   SetColor 255,255,255
   DrawText GetFPS(),10,10
   DrawText "RED: "+r,10,30
   DrawText "GREEN:"+g,10,50
   DrawText "BLUE: "+b,10,70
   
   
   Flip
   FlushMem()
Until KeyHit(KEY_ESCAPE)




Function ColorOnPosition(x:Int, y:Int, r:Int Var, g:Int Var, b:Int Var, Update:Int=False)
   Global GlobalPixmap:TPixmap
   Local TempPtr:Byte Ptr
   
   If GlobalPixmap = Null Or Update = True
      GlobalPixmap = GrabPixmap(0,0,GraphicsWidth(), GraphicsHeight())
   EndIf

   TempPtr = GlobalPixmap.PixelPtr(x,y)
   r = TempPtr[2]
   g = TempPtr[1]
   b = TempPtr[0]
      
End Function


Hier wird der ganze Screen in eine Pixmap gepackt und nur bei bedarf(Wenn Update auf True ist oder die Pixmap noch nicht exestiert) geupdated wird.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Hammlet

BeitragSa, Jul 30, 2005 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ist wirklich extrem schnell. Habe ca. 750 fps, sogar wenn ich 1000 Pixel abfrage. Exclamation
übrigens habe ich den Fehler meiner ersten Variante gefunden.
Statt " Bild:Timage=LoadImage("bild.png") " muss natürlich
" Bild=LoadImage("bild.png",dynamicimage) " stehen. Dann gehts auch, nur extrem langsam. Hab nur 50 fps!!

Nun hab ich aber eine neue Frage. Ich möchte jetzt mit Writepixel auf das Bild malen. Bei meiner ersten Version geht das auch, aber eben nur mit 50 fps. Darum hab ich es mal bei der Version von Suco-x probiert. Leider sieht man die Pixel nicht.
hier der abgeänderter Code:
BlitzBasic: [AUSKLAPPEN]

Graphics (1280,1024,depht16,hertz60)

Local TempPixmap:TPixmap

Global bild=LoadImage(\"bild.png\",dynamicimage)

Global argb

Repeat
Cls

mx=MouseX()
my=MouseY()
DrawImage bild,0,0

Local r,g,b
ColorOnPosition(mx,my,r,g,b,False)

SetColor 255,255,255

DrawText \"RED: \"+r,10,30
DrawText \"GREEN:\"+g,10,50
DrawText \"BLUE: \"+b,10,70

FPSCount = FPSCount + 1
If MilliSecs() - Startz > 1000 Then
FPS = FPSCount
FPSCount = 0
Startz = MilliSecs()
EndIf

DrawText fps,900,10

Flip
FlushMem()
Until KeyHit(KEY_ESCAPE)

Function ColorOnPosition(x:Int, y:Int, r:Int Var, g:Int Var, b:Int Var,Update:Int=False)
Global GlobalPixmap:TPixmap
Local TempPtr:Byte Ptr

If GlobalPixmap = Null Or Update = True
GlobalPixmap = GrabPixmap(0,0,GraphicsWidth(), GraphicsHeight())
EndIf

TempPtr = GlobalPixmap.PixelPtr(x-1,y)
r = TempPtr[2]
g = TempPtr[1]
b = TempPtr[0]

argb=150*$1000000 + 200*$10000 + 0*$100 + 0

For nr=1 To 100
WritePixel(globalpixmap,100+nr,100,argb)
WritePixel(globalpixmap,100+nr,101,argb)
WritePixel(globalpixmap,100+nr,102,argb)
Next

End Function

bruZard

BeitragMo, Okt 17, 2005 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry dass ich den Thread nochmal hoch hole ... aber ich muss mich doch nochmal bei Suco-X bedanken Smile diese Pixelpointer Geschichte hat gerade eine sechsstündige Suche und ewiges Ausprobieren beendet Smile

Ich brauchte für das Timemill GUI Modul eine Funktion welche die Hintergrundfarbe von GUI Elementen ermittelt. Nachdem ich an Bitverschiebungen auf Basis des ReadPixel Ergebnisses fast verreckt wäre und schon den Umweg über XML Dateien gegenagen bin hat mir dieser Thread hier "den Arsch gerettet" Smile

Hail to the Suchmaschine Smile
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group