Fehler bei start drawing ? [Behoben]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Fehler bei start drawing ? [Behoben]

Beitrag 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
Zuletzt geändert von The_Dark_Zim-.- am 03.08.2009 23:05, insgesamt 1-mal geändert.
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

dann kann es ja nur noch eine falsch übergebene Nummer sein.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag 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 ?
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Beitrag 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
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag 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
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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.
Antworten