ich hab da ein problem, da brauche ich etwas Unterstützung. Ich bastle gerade an zwei kleinen Prozeduren, die ein Bild von 32 auf 24 Bit Farbtiefe konvertieren und umgekehrt. Dabei bin ich auf ein Phänomen gestossen, was ich nicht erklären kann: führe ich das programm ohne Debugger aus, dann läuft es auf einen Fehler bei der Funktion StartDrawing(). Führe ich das selbe Programm im Debugger aus, läuft es.
Hier der Das Programm:
Code: Alles auswählen
Structure pixel24 ;RGB-Struktur ohne Alpha-Kanal
pixel_r.c
pixel_g.c
pixel_b.c
EndStructure
Structure pixel32 ;RGB-Struktur mit Alpha-Kanal
pix_r.c
pix_g.c
pix_b.c
pix_a.c
EndStructure
Procedure konvertiere24nach32(bildnummer)
kopie = CreateImage(#PB_Any, ImageWidth(bildnummer), ImageHeight(bildnummer), 32)
If kopie
org_output = ImageOutput(bildnummer)
If StartDrawing(org_output)
*org_adr.pixel24 = DrawingBuffer()
StopDrawing()
Else
MessageRequester("konvertiere24nach32: Fehler", "StartDrawing(Original) fehlgeschlagen!")
End
EndIf
kopie_output = ImageOutput(kopie)
If StartDrawing(kopie_output)
*kopie_adr.pixel32 = DrawingBuffer()
StopDrawing()
Else
MessageRequester("konvertiere24nach32: Fehler", "StartDrawing(Kopie) fehlgeschlagen!")
End
EndIf
For i = 1 To ImageWidth(bildnummer) * ImageHeight(bildnummer)
*kopie_adr\pix_r = *org_adr\pixel_r
*kopie_adr\pix_g = *org_adr\pixel_g
*kopie_adr\pix_b = *org_adr\pixel_b
*kopie_adr\pix_a = 0
*kopie_adr + 4
*org_adr + 3
Next
CopyImage(kopie, bildnummer)
FreeImage(kopie)
EndIf
EndProcedure
Procedure konvertiere32nach24(bildnummer)
kopie = CreateImage(#PB_Any, ImageWidth(bildnummer), ImageHeight(bildnummer), 24)
If kopie
org_output = ImageOutput(bildnummer)
If StartDrawing(org_output)
*org_adr.pixel32 = DrawingBuffer()
StopDrawing()
Else
MessageRequester("konvertiere32nach24: Fehler", "StartDrawing(Original) fehlgeschlagen!")
End
EndIf
kopie_output = ImageOutput(kopie)
If StartDrawing(kopie_output)
*kopie_adr.pixel24 = DrawingBuffer()
StopDrawing()
Else
MessageRequester("konvertiere32nach24: Fehler", "StartDrawing(Kopie) fehlgeschlagen!")
End
EndIf
For i = 1 To ImageWidth(bildnummer) * ImageHeight(bildnummer)
*kopie_adr\pixel_r = *org_adr\pix_r
*kopie_adr\pixel_g = *org_adr\pix_g
*kopie_adr\pixel_b = *org_adr\pix_b
*kopie_adr + 3
*org_adr + 4
Next
CopyImage(kopie, bildnummer)
FreeImage(kopie)
EndIf
EndProcedure
UseJPEGImageDecoder()
original = LoadImage(#PB_Any,"H:\800x600\Image03.jpg")
original_id = ImageID(original)
If OpenWindow(0, 216, 0, 800, 600, "32<->24 Bit-Konvertierung", #PB_Window_SystemMenu | #PB_Window_TitleBar )
ImageGadget(1, 0, 0, 800, 600, original_id)
MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
konvertiere24nach32(original)
SetGadgetState(1, original_id)
MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
konvertiere32nach24(original)
SetGadgetState(1, original_id)
MessageRequester("Bild-Info", Str(ImageWidth(original)) + " x " + Str(ImageHeight(original)) + " x " + Str(ImageDepth(original)))
EndIf
MessageRequester("Ende", "Programm-Ende")
EndKann mir das jemand erklären?!
Grüße,
Paul
