Direkter Zugriff auf einzelne Pixel in Pixmaps
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
SensenwerkBetreff: Direkter Zugriff auf einzelne Pixel in Pixmaps |
Sa, Aug 20, 2005 16:11 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Aug 20, 2005 16:20 Antworten mit Zitat |
|
---|---|---|
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. |
SensenwerkBetreff: hust |
Sa, Aug 20, 2005 16:38 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Aug 20, 2005 16:53 Antworten mit Zitat |
|
---|---|---|
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-XBetreff: ....... |
Sa, Aug 20, 2005 17:03 Antworten mit Zitat |
|
---|---|---|
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 |
TheShadowModerator |
So, Aug 21, 2005 14:38 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Aug 22, 2005 12:32 Antworten mit Zitat |
|
---|---|---|
@TheShadow
Die Pixmaps kann man auch konvertieren in ein Format welches man gut findet . Da hat BMax nen extra Befehl für . |
||
TheShadowModerator |
Di, Aug 23, 2005 19:18 Antworten mit Zitat |
|
---|---|---|
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 |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group