werte mit readpixelfast aus imagebuffer auslesen

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

sbrog

Betreff: werte mit readpixelfast aus imagebuffer auslesen

BeitragSo, Sep 19, 2004 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
in folgendem code will ich mit readpixelfast die Farbinformationen aus einem Imagebuffer auslesen, aber ich bekomme einen Laufzeitfehler. Mit readpixel klappt es.

Code: [AUSKLAPPEN]

SetBuffer ImageBuffer(bild1)

LockBuffer ImageBuffer(bild1)
For i = 0 To bildbreite
   For j = 0 To bildhoehe
   
      rgb = ReadPixelFast(i,j)
      rot1(i,j)   =(rgb And $FF0000)/$10000       ;Rot einlesen
      gruen1(i,j) =(rgb And $FF00)/$100           ;Grün einlesen
      blau1(i,j)  =rgb And $FF                    ;Blau einlesen
      

   Next
Next
UnlockBuffer ImageBuffer(bild1)
 

Dreamora

BeitragSo, Sep 19, 2004 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
0 to bildbreite -1
0 to bildhöhe -1


zweifel doch sehr daran dass ReadPixel funktionieren wird, wenn du über das Bild hinaus auszulesen versuchst Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

sbrog

BeitragSo, Sep 19, 2004 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
doch mit readpixel funktioniert es.
aber es funktioniert auch nich mit readpixelfast und mit dem -1

ich glaube das hat was mit imagebuffer zu tun

Hubsi

BeitragSo, Sep 19, 2004 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ReadPixel funktioniert wohl deshalb, weil es eine Sicherheitsprüfung durchführt. Wenn Du -1 auf Höhe und Breite anwendest sollte es aber auch mit ReadPixelFast funktionieren?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

sbrog

BeitragSo, Sep 19, 2004 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein ,, es funktioniert echt nicht. hier der ganze Code,damit ihr es selbt probieren könnt (ist auch im codearchiv)

http://sbrog.tim-koepsel.de/Verwandlung.rar
 

Dreamora

BeitragSo, Sep 19, 2004 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst ja mal in den Debugmodus wechseln und nachsehen wo der Fehler genau entsteht.

Sofern Bild1 überhaupt existiert wird es mit 0 to Bildbreite -1 / 0 to bildhoehe -1 funktionieren.
vorausgesetzt natürlich, dass du die richtige bildhöhe / bildbreite eingelesen hast.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

sbrog

BeitragSo, Sep 19, 2004 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
im debugmodus wird ja genau die zeile mit readpixelfast als fehler angezeigt
 

Dreamora

BeitragSo, Sep 19, 2004 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
dann stimmt bild1 nicht bzw. bildhöhe / bildbreite

guck im debugmodus mal wie gross die variablen sind wenn der fehler auftritt ( wird ja angegeben im stack der aktuellen funktion )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

sbrog

BeitragSo, Sep 19, 2004 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
die bildbreite beträgt 500, die bildhoehe 400, eben genau die größe des Bildes. Aber es funktioniert auch nicht, wenn ich schreibe for i = 0 to bildbreite - 100. Außerdem ermittle ich die größen mit imagewidth bzw. imageheight. Die größe kann also gar nicht falsch sein.

Holzchopf

Meisterpacker

BeitragSo, Sep 19, 2004 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
an welcher Position (resp. bei welchen i, j Werten) tritt denn der Fehler auf? Wenns schon von Anfang an, also bei Position 0,0 einen Fehler gibt, würd ich vorschlagen, du gibst den Parameter Buffer bei Readpixelfast auch noch an. Ansonsten ist anzunehmen, dass die Grösse des Bildes nicht stimmt Rolling Eyes
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

sbrog

BeitragSo, Sep 19, 2004 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
[quote="sbrog"]die bildbreite beträgt 500, die bildhoehe 400, eben genau die größe des Bildes. /quote]

damit meinte ich die stelle an der der fehler auftritt

Die größe des bildes beträgt 500 * 400 . außerdem muss sie stimmen, weil ich sie mit imageheight und imagewidth bestimme. Und oben hab ich bereits den Download angebracht Wink
 

Dreamora

BeitragSo, Sep 19, 2004 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut dann sagen wir es nochmal:

0 to imagewidth -1

ein bild geht immer von 0 bis bildbreite -1 wenn du also bei einem 500er bild 500 als aktuelles i hast, dann bist du ausserhalb des bildes -> error
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

sbrog

BeitragSo, Sep 19, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe schonmal gesagt, dass es mit for i = 0 to bildbreite -1 auch nicht klappt.

Blatolo

BeitragSo, Sep 19, 2004 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir klappt dein programm, das du zum download gestellt hast.
Habe read/write pixel einfach mit read/write pixelfast ersetzt und trotzdem trat kein fehler auf

sbrog

BeitragSo, Sep 19, 2004 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
??? ist ja sehr komisch, aber danke für deine Nachforschungen.

Ich hab gerade auch einmal rumexperimentiert, und festgesellt, dass der code funktioniert, wenn man die bilder erstellt, anstatt sie zu laden.

D2006

Administrator

BeitragSo, Sep 19, 2004 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

bild1 = LoadImage(...)
breite = ImageWidth(bild1)
hoehe = ImageHeight(bild1)
Dim rot(breite-1,hoehe-1),gruen(breite-1,hoehe-1),blau(breite-1,hoehe-1)

SetBuffer ImageBuffer(bild1)
LockBuffer()

For y=0 To hoehe -1
For x=0 To breite -1
       rgb= ReadPixelFast(x,y)
       rot(x,y) = (rgb And $FF0000)/$10000
       gruen(x,y)=(rgb And $FF00)/$100
       blau(x,y)=rgb And $FF
Next
Next
UnlockBuffer()


Das muss funktionieren.
MfG

sbrog

BeitragSo, Sep 19, 2004 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
also bei mir sieht es momentan so aus :

Das funktioniert (obwohl die schleifen um 1 pixel aus dem buffer hinauslaufen)
Code: [AUSKLAPPEN]

Graphics 800,600

bild = createimage(50,50)

breit = ImageWidth(bild)
hoch = ImageHeight(bild)

SetBuffer ImageBuffer(bild)
LockBuffer ImageBuffer (bild)

For i = 0 To breit
   For j = 0 To breit
      rgb = ReadPixelFast(i,j)
   Next
Next
UnlockBuffer BackBuffer()



Das funktioniert nicht (das createimage wurde durch ein loadimage ersetzt)
Code: [AUSKLAPPEN]

Graphics 800,600

bild = LoadImage("bild.jpg")

breit = ImageWidth(bild)
hoch = ImageHeight(bild)

SetBuffer ImageBuffer(bild)
LockBuffer ImageBuffer (bild)

For i = 0 To breit
   For j = 0 To breit
   
   rgb = ReadPixelFast(i,j)
   
   Next
Next

UnlockBuffer BackBuffer()


und das funktioniert auch nicht (bei der schleife wird - 1 berücksichtigt)
Code: [AUSKLAPPEN]

Graphics 800,600

bild = LoadImage("bild.jpg")

breit = ImageWidth(bild)
hoch = ImageHeight(bild)

SetBuffer ImageBuffer(bild)
LockBuffer ImageBuffer (bild)

For i = 0 To breit  -1
   For j = 0 To breit  -1
   
   rgb = ReadPixelFast(i,j)
   
   Next
Next

UnlockBuffer BackBuffer()
  • Zuletzt bearbeitet von sbrog am So, Sep 19, 2004 16:38, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragSo, Sep 19, 2004 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
sbrog hat Folgendes geschrieben:

und das funktioniert auch nicht (bei der schleife wird - 1 berücksichtigt)
Code: [AUSKLAPPEN]

Graphics 800,600

bild = LoadImage("bild.jpg")

breit = ImageWidth(bild)
hoch = ImageHeight(bild)

SetBuffer ImageBuffer(bild)
LockBuffer ImageBuffer (bild)

For i = 0 To breit
   For j = 0 To breit
   
   rgb = ReadPixelFast(i,j)
   
   Next
Next

UnlockBuffer BackBuffer()


Ach ja? Wo denn? Rolling Eyes
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

hot-bit

Gast

BeitragSo, Sep 19, 2004 16:28
Antworten mit Zitat
Hoi,

das gleiche wollte ich auch fragen Wink

Toni
 

Dreamora

BeitragSo, Sep 19, 2004 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man dir schon fertigen Code postet, sollte es doch möglich sein ihn mittels Copy Paste einzufügen, wenn du ihn schon nicht verstehen möchtest, oder.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am So, Sep 19, 2004 16:40, insgesamt einmal bearbeitet

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group