LockedPixels - Merkwürdiges Problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

hazumu-kun

Betreff: LockedPixels - Merkwürdiges Problem

BeitragSa, März 13, 2010 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Folgender Code:
BlitzBasic: [AUSKLAPPEN]
Const gfx_w=1024
Const gfx_h= 768

Global refbmp
Global refbmp_w,refbmp_h
Global refbuff

Global bank, bank_size, byteperpixel, byteperline, pixelperline

Local x,y,i

AppTitle "Lockedpixels Test"
Graphics gfx_w,gfx_h,32,2
SetBuffer BackBuffer()

refbmp= LoadImage("ref.png",2)
refbmp_w= ImageWidth(refbmp)
refbmp_h= ImageHeight(refbmp)
refbuff= ImageBuffer(refbmp)

LockBuffer (refbuff)
bank= LockedPixels(refbuff)
byteperpixel= LockedFormat(refbuff)
byteperline= LockedPitch(refbuff)/byteperpixel
pixelperline= byteperline/byteperpixel
UnlockBuffer (refbuff)


bank_size= refbmp_w*refbmp_h*byteperpixel

While Not KeyHit(1)
Text 5, 5,"Bits per Pixel: "+byteperpixel*8+" Bits"
Text 5,20,"Bytes per Line: "+byteperline+"B"
Text 5,35,"Pixel per Line: "+pixelperline
Text 5,50,"Bank size: "+bank_size+"B"
Text 5,65,"Bank content:"
;LockBuffer (refbuff)
x= 5
y= 80
For i= 0 To bank_size-1 Step 4
Text x,y,Hex$(PeekByte(bank,i))

x= x+80
If x+80>1024 Then x= 5:y=y+15

Next
;UnlockBuffer (refbuff)

Flip
Delay 50
Cls
Wend


Treibt mich schon seit 2 Stunden in den Wahnsinn, ich lade irgendein 16x16 Pixel Testbild und lasse mir, nur zum Testen, indirekt über die Bank von Lockedpixels, die Farbwerte ausgeben.

Allerdings scheinen die überhaupt keinen Sinn zu ergeben!

Wenn ich ein Schwarzes Bild habe, ist alles bei 00000xx (xx entweder FF oder 00, wechselt sich ohne System ab).
Wenn ich ein Weißes Bild habe 000000FF!

Da lässt sich absolut keine Logik erkennen!

Das Bild ist 24bpp wird aber in eine 32bit Buffer geladen, also daran würde es nicht liegen.

Anzumerken ist das LockedPitch nicht wirklich die Bytes pro Zeile ausgibt, sondern einen Wert der erst nach Korrektur durch:
Code: [AUSKLAPPEN]
byteperline= LockedPitch(refbuff)/byteperpixel

Sinn ergibt.

Ich entschuldige mich für Tippfehler und schlechte Krammatig, aber es regt mich ein wenig auf.

p.s.: Ist es normal das die Bank vom Lockedpixels laut BankSize 0Byte groß ist?
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

The Shark

BeitragSa, März 13, 2010 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
peekbyte durch peekint ersetzen, dann gehts Wink

EDIT: und LockedPitch gibt sehr wohl die bytes per line an, wenn du die pixel haben willst, musst du durch die anhahl der bytes pro pixel teilen.
  • Zuletzt bearbeitet von The Shark am Sa, März 13, 2010 18:48, insgesamt einmal bearbeitet

hazumu-kun

BeitragSa, März 13, 2010 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
oh, okay, das erzeugt aber immernoch misteriöse Variationen der Farbcodes.

Bei Weiß stimmt jetzt alles.

Bei schwarz aber immer noch abwechseln zwischen FF00000 und 00FFFFFF.

Und von den Farben brauchen wir garnicht erst anfangen...
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

The Shark

BeitragSa, März 13, 2010 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert problemlos:

BlitzBasic: [AUSKLAPPEN]
Const gfx_w=1024
Const gfx_h= 768

Global refbmp
Global refbmp_w,refbmp_h
Global refbuff

Global bank, bank_size, byteperpixel, byteperline, pixelperline

Local x,y,i

AppTitle "Lockedpixels Test"
Graphics gfx_w,gfx_h,32,2
SetBuffer BackBuffer()

refbmp= LoadImage("ref.png",2)
refbmp_w= ImageWidth(refbmp)
refbmp_h= ImageHeight(refbmp)
refbuff= ImageBuffer(refbmp)

LockBuffer (refbuff)
bank= LockedPixels(refbuff)
byteperpixel= LockedFormat(refbuff)
byteperline= LockedPitch(refbuff)
pixelperline= byteperline/byteperpixel
UnlockBuffer (refbuff)


bank_size= refbmp_w*refbmp_h*byteperpixel

While Not KeyHit(1)
For y=0 To refbmp_h-1
For x=0 To refbmp_w-1
WritePixel(300+x,5+y,PeekInt(bank,y*byteperline+x*4),BackBuffer())
Next
Next
Text 5, 5,"Bits per Pixel: "+byteperpixel*8+" Bits"
Text 5,20,"Bytes per Line: "+byteperline+"B"
Text 5,35,"Pixel per Line: "+pixelperline
Text 5,50,"Bank size: "+bank_size+"B"
Text 5,65,"Bank content:"
LockBuffer (refbuff)
x= 5
y= 80
For i= 0 To bank_size-1 Step 4
Text x,y,Hex$(PeekInt(bank,i))

x= x+80
If x+80>1024 Then x= 5:y=y+15

Next
UnlockBuffer (refbuff)

Flip
Delay 50
Cls
Wend

hazumu-kun

BeitragSa, März 13, 2010 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, dann bitte ich dich aber noch kurz mir das mit den komischen Farbwerten zu erklären, erstell dir grade mal ein 16x16 Bild mit folgendem Inhalt:

von oben nach unten:
2 Zeilen Rot
2 Zeilen Grün
2 Zeilen Blau
2 Zeilen Gelb
2 Zeilen Cyan
2 Zeilen Magenta
4 Zeilen Farbverlauf weiß->Scharz

folgende Codes zeigt das Programm dann an:
16x FFFF0000 <- Rot ohne Alpha, eine Zeile
dann ne ganze menge mal 00FFFFFF, was keinen Sinn ergibt, da dort eigentlich noch eine Zeile Rot kommen würde.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

The Shark

BeitragSa, März 13, 2010 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dem von mir geringfügig korrigierte code gehts einwandfrei:
user posted image

hazumu-kun

BeitragSa, März 13, 2010 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich deinen Code benutze kommt bei mir folgendes raus:
user posted image

Was komischerweise nicht deinem Ergebnis entspricht...

Und was noch auffälliger ist, ist dass bytesperline bei mir irgendwie nicht den selben Wert hat wie bei dir.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
  • Zuletzt bearbeitet von hazumu-kun am Sa, März 13, 2010 19:22, insgesamt einmal bearbeitet

Starwar

BeitragSa, März 13, 2010 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir (B+ V 1.44 laut IDE funzt) es auch nicht.

EDIT: Lass mal die 2 bei LoadImage weg...
  • Zuletzt bearbeitet von Starwar am Sa, März 13, 2010 19:24, insgesamt einmal bearbeitet

hazumu-kun

BeitragSa, März 13, 2010 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutze die selbe Version wie starwar.
Was benutzt du Shark?

EDIT: Das erzeugt die richtigen Farbcodes, ja, aber da ich nun ein 24bit buffer habe plötzlich, stimmt die anzteige des bildes oben nichtmehr, ist ja auch klar, da step 4 nicht mehr gültig ist.


Woran könnte es liegen das das flag um die Grafik komplett im VRAM zu behalten sich so damit stört bei mir, und bei shark nicht?
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

The Shark

BeitragSa, März 13, 2010 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Die neueste 1.47
Ihr solltet mal updaten, vllt liegts daran

hazumu-kun

BeitragSa, März 13, 2010 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Daran lags nicht, siehe oben.

Lässts sich dieser Fehler auf die mangelnde Untersützung von DX7 oder so schieben?
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

The Shark

BeitragSa, März 13, 2010 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann natürlich sein, versuch mal den open-gl modus zu aktivieren, vielleicht geht es dann

hazumu-kun

BeitragSa, März 13, 2010 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
OpenGL Modus, in BlitzPlus, sollte das lustig sein oder hab ich ernsthaft was verpasst?
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

The Shark

BeitragSa, März 13, 2010 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sag mal SetGfxDriver

EDIT: Stand kürzlich sogar in den News: https://www.blitzforum.de/foru...hp?t=33420

hazumu-kun

BeitragSa, März 13, 2010 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt läuft es auch mit flag 2 so wie es soll, allerdings kommt beim beenden sie Standard fehlermeldung "bla hat ein problem festge...."

Wenn ich den "Native" Treiber einstelle läuft es reibungslos.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group