Seite 1 von 1

Fehler bei start drawing ? [Behoben]

Verfasst: 03.08.2009 21:13
von The_Dark_Zim-.-
Hey Ho
Ich hab da ein kleines Problem. Ich möchte mit hilfe der Procedure (siehe unten ^^) einige Bilder schwartzweiß machen aber immer mal wieder sagt der debugger "The specified output is NULL..",bei der Zeile if startdrawing... Ich verstehe blos nicht woran das liegen könnte.

Code: Alles auswählen

Procedure GrayImage(Number) 
  If StartDrawing(ImageOutput(Number))
    For y1 = 0 To ImageHeight(Number)
      For x1 = 0 To ImageWidth(Number)
        Farbwert.l = Point(x1, y1)
        NeuerFarbwert.l = Round(Red(Farbwert) * 0.56 + Green(Farbwert.l) * 0.33 + Blue(Farbwert) * 0.11, 0)
        Plot(x1, y1, RGB(NeuerFarbwert.l, NeuerFarbwert.l, NeuerFarbwert.l))
      Next x1
    Next y1
    StopDrawing()
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
Die Bilder werden richtig geladen, das habe ich bereits geprüft.
Auf Grund dessen ist es mir auch ein Rätzel, warum er einen Fehler ausspuckt. Evtl. hat ja jemand einen Tipp ^^

Gruß Zim

Verfasst: 03.08.2009 21:22
von Kaeru Gaman
dann kann es ja nur noch eine falsch übergebene Nummer sein.

Verfasst: 03.08.2009 21:42
von The_Dark_Zim-.-
Die Nummer steht dauerhaft auf 0 ^^

Edit: Ich hab jetzt mal das mit ProcedureReturn raus gemacht.Jjetzt läuft das Programm eigentlich an der Stelle vorbei, an dem der Befehl aufgerufen wird und schmeisst mich dann nach einer weile trotzdem an dem Punkt raus. Kann es sein das er sich da irgentwie festläuft, sprich er immer wieder die Procedure durchläuft oderso ?

Verfasst: 03.08.2009 22:26
von CSHW89
also ich hab da ein kleinen fehler in deinem programm erkannt. du must nach den befehlen 'ImageWidth' und 'ImageHeight' noch '-1' schreiben.
Wenn nämlich ein Image z.B. eine Breite von 10 hat, kannst du nur die pixel von 0 bis 9 ansprechen. ich denke aber nicht, dass das daran liegen könnte, aber versuchs einfach mal.

Code: Alles auswählen

Procedure GrayImage(Number)
  If StartDrawing(ImageOutput(Number))
    For y1 = 0 To ImageHeight(Number)-1
      For x1 = 0 To ImageWidth(Number)-1
        Farbwert.l = Point(x1, y1)
        NeuerFarbwert.l = Round(Red(Farbwert) * 0.56 + Green(Farbwert.l) * 0.33 + Blue(Farbwert) * 0.11, 0)
        Plot(x1, y1, RGB(NeuerFarbwert.l, NeuerFarbwert.l, NeuerFarbwert.l))
      Next x1
    Next y1
    StopDrawing()
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Verfasst: 03.08.2009 22:30
von Vermilion
Der Threadtitel ist mal wieder vorbildlich für Themenverfehlung... Das hat nichts damit zu tun, dass du das Image zu schwarz-weiß konvertieren willst.

Bei mir funktioniert es einwandfrei. Vielleicht solltest du mal ImageID() benutzen, wenn du dein Image mit der Nummernangabe #PB_Any lädst.

Die Long Typendeklarierungen sollte man seit PureBasic 4.30 weglassen (oder sogar schon früher). Da es sonst Komplikationen mit 64-Bit geben könnte. Abgesehen davon ist es überflüssig, da der Standardvariablentyp schon long ist.

Verfasst: 03.08.2009 22:42
von The_Dark_Zim-.-
So srry für den Titel wo kann man den denn ändern und in was sollte ich was abändern ?

Hab das Problem gefunden ^^. Zwischen den Bildern war ein *.ico das wollte er iwie nicht haben.

Bisher hatte ich keine Probleme damit das die Variable als LONG deklariert ist (WinXP64+) Ist auch nur drin weil ich bei einem großen Bild gedacht habe, dass die Variable umkippt. War aber nicht der fall :P

Gruß Zim

Verfasst: 03.08.2009 22:59
von Kaeru Gaman
also, grad bei XP64 ist es verdammt falsch wenn du ein Handle in einer Long speicherst.

lass das .l einfac weg, dann benutzt er defaultseitig .i, das funktionert auf jeden Fall.

und den Titel ändert man im ersten posting.

Verfasst: 04.08.2009 08:33
von Vermilion
Vermilion hat geschrieben:Abgesehen davon ist es überflüssig, da der Standardvariablentyp schon long ist.
Wichtig: Selbstkorrektur! Long war der Standardvariablentyp in früheren PureBasic Versionen, wie Kaeru schon schrieb, Integer ist nun der Standard.