Direkter Zugriff auf einzelne Pixel in Pixmaps

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Sensenwerk

Betreff: Direkter Zugriff auf einzelne Pixel in Pixmaps

BeitragSa, Aug 20, 2005 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo erstmal,
ich hab folgendes Problem: GrabPixmap ist leider viel zu langsam um es während des eingentlichen Programmflusses zu benutzen.
Darum habe ich vor, die entsprechende Pixmap vor dem Start zu erzeugen und dann nur noch mit Pointern oder so auf die direkten Pixel zuzugreifen. Lesen ist kein Problem, aber ich möchte auch (Farb-)Schreibzugriff.
Kann mir jemand helfen und erklären, wie das gehen könnte?
Danke im Vorraus.
L'enfer, c'est les autres. (Jean Paul Sartre)

Havoc ~40% done

Sensenwerk.eu
 

Dreamora

BeitragSa, Aug 20, 2005 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Die integrierte Hilfe sagt:

ReadPixel (Pixmap:TPixmap,x,y)
WritePixel (Pixmap:TPixmap,x,y,argb)

Damit hast du die Befehle die du benötigst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Sensenwerk

Betreff: hust

BeitragSa, Aug 20, 2005 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ups..... hab irgendwie immer nur bei Max2d Hilfe geschaut und nicht bemerkt, dass es einen Extrateil für Pixmaps gibt.
Sehr peinlich, aber danke für die Hilfe.. :)

Wo wir gerade dabei sind, noch eine Frage:
Wie konvertiert man einen argb Wert in die drei Farbwerte + Alpha und umgekehrt? Fragen über Fragen... ;)
L'enfer, c'est les autres. (Jean Paul Sartre)

Havoc ~40% done

Sensenwerk.eu
 

Dreamora

BeitragSa, Aug 20, 2005 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Konvertierung erfolgt durch Bitoperationen auf den 32Bit die eine ARGB Farbe beinhaltet.
Die folgenden Funktionen sind für das Standard 32Bit Farbformat (funktionieren sonst nicht), also A8R8G8B8

Code: [AUSKLAPPEN]

function from_argb (argb:int, a:byte var, r:byte var, g:byte var, b:byte var)
   a = argb shr 24
   r = argb shr 16 & $FF
   g = argb shr 8 & $FF
   b = argb & $FF
end function

function to_argb:int (a:byte, r:byte, g:byte, b:byte)
   return (a shl 24) | (r shl 16) | (g shl 8) | b
end function


*wie üblich keine Garantie zur vollstänigen Korrektheit*
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Suco-X

Betreff: .......

BeitragSa, Aug 20, 2005 17:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich bin ja mehr ein Fan von PixmapPixelPtr.

Code: [AUSKLAPPEN]

Local ColorPtr:byte ptr = PixmapPixelPtr(Pixmap, x, y)
'ColorPtr[0] ist rot
'1  ist grün
'2 ist blau
'3 Alpha


Desweiteren muss Bmax bei so einem Funktionsaufruf(Siehe PixmapPixelPtr)
immer Checken ob es sich bei der Pixmap um eine Instanz oder Integer Handle handelt und das braucht immer Zeit die man besser nutzen könnte.

Drum empfehle ich die OO Version:

Code: [AUSKLAPPEN]

Local Pixmap:TPixmap = LadenOderErstellen
Local ColorPtr:byte ptr = Pixmap.PixelPtr(x,y)




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

TheShadow

Moderator

BeitragSo, Aug 21, 2005 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ich weiß nicht das mit pixelptr - was ist, wenn man 16 bit hat? dann muss man alles umrechnen? oder konvertiert bbmax alles?
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Markus2

BeitragMo, Aug 22, 2005 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
@TheShadow
Die Pixmaps kann man auch konvertieren in ein Format welches man gut findet .
Da hat BMax nen extra Befehl für .

TheShadow

Moderator

BeitragDi, Aug 23, 2005 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
was ich eher meinte war:

wenn man sich auf 16 und 32 bit screen konzentriert, dann benötigt man immer 2 "getrennte" zeichen-routinen - die zwar schneller wären - aber auch aufwendiger als mit writepixel

Ich bin nicht so der Fan von im Grafikram rumpixeln - weil das irg. sehr langsam ist...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group