FarbTiefe bei GrabImage ?
Verfasst: 14.03.2009 16:05
Hallo,
Ich bastel hier an ´nem Prg. zur Nachbereitung eingescannter Bilder (Drehen, Weißen und/oder Auschnitt), wobei im Fenster erstmal das
verkleinerte Bild dargestellt wird, auf dem der User dann die Nachbereitung durchführen kann. Beim "speichern" wird dann das Bild geladen und die
durchgeführten Änderungen auf diesem Orginal-Bild ausgeführt (wg.
Minimierung BildDaten-Verlusten).
Soweit klappt auch alles prima, nur beim Speichern ergibt sich ´n komischer Effekt:
wenn ich in ´nem Sw/Ws-Bild nur Ausschneide, so wird aus weiss dunkelrot (mit vorherigem Drehen oder bei Farb-Bildern ist´s korrekt).
Leider kann ich hier keinen direkt lauffähigen Code posten (5449 Zeilen, 236656 Bytes) und beschränke mich deshalb auf die relevante Procedure...
Kann jemand erkennen, was ich da falsch mache ?
Danke im Vorraus...
SiBru
Ich bastel hier an ´nem Prg. zur Nachbereitung eingescannter Bilder (Drehen, Weißen und/oder Auschnitt), wobei im Fenster erstmal das
verkleinerte Bild dargestellt wird, auf dem der User dann die Nachbereitung durchführen kann. Beim "speichern" wird dann das Bild geladen und die
durchgeführten Änderungen auf diesem Orginal-Bild ausgeführt (wg.
Minimierung BildDaten-Verlusten).
Soweit klappt auch alles prima, nur beim Speichern ergibt sich ´n komischer Effekt:
wenn ich in ´nem Sw/Ws-Bild nur Ausschneide, so wird aus weiss dunkelrot (mit vorherigem Drehen oder bei Farb-Bildern ist´s korrekt).
Leider kann ich hier keinen direkt lauffähigen Code posten (5449 Zeilen, 236656 Bytes) und beschränke mich deshalb auf die relevante Procedure...
Kann jemand erkennen, was ich da falsch mache ?
Code: Alles auswählen
Procedure BildSave() ;- am Fenster-Bild durchgeführte Änderungen auf Datei-Bild anwenden
Protected ImgNr, BackFile$, fakt.d, ImgNr_tmp
If Update
BackFile$ = FileBackup(BildFiles$()) ;legt ´ne SicherheitsKopie an und liefert dessen DateiNamen
ImgNr = LoadImage(#PB_Any, BildFiles$(), 24) ;Orginal-Bild einlesen
If IsImage(ImgNr)
fakt = Max_D(ImageWidth(ImgNr) / ImgBr, ImageHeight(ImgNr) / ImgHo) ;Faktor Fenster-Bild --> Orginal-Bild
If WeissQueue$ ;Bereich um MausZeiger einweißen (dunkle Schatten vom Scannen...)
While WeissQueue$>"" ;wortweise: x und y
x = Val(Wort(@WeissQueue$)) * fakt ;Wort: liefert nächsten Wert aus Queue und kürzt Queue entsprechend...
y = Val(Wort(@WeissQueue$)) * fakt
FillArea(x, y, #White, #White)
Wend
EndIf
If Drehung ;Summe aller durchgeführten Drehungen (1..359°)
ImgNr_tmp = CreateImage(#PB_Any, ImageWidth(ImgNr), ImageHeight(ImgNr), 24) ;Drehungs-ZielImage erstellen
Protected ProgGad = ProgressBarGadget(#PB_Any, 5, Win_T / 2, Win_B - 10, 30, 1, 100, #PB_ProgressBar_Smooth)
Image_drehen_Progress = ProgGad
Image_drehen(ImgNr, ImgNr_tmp, Drehung) ;geladenes Bild drehen, incl. Progressbar...
FreeImage(ImgNr)
FreeGadget(ProgGad)
ImgNr = ImgNr_tmp ;gedrehtes Bild übernehmen
Drehung = 0
EndIf
If x1 And y1 And x9 And y9 ;Ausschnitt
ImgNr_tmp = GrabImage(ImgNr, #PB_Any, x1 * fakt, y1 * fakt, (x9 - x1) * fakt, (y9 - y1) * fakt) ;Ausschnitt in ImgNr_tmp überführen
If IsImage(ImgNr_tmp)
FreeImage(ImgNr) ;OrginalBild weg
ImgNr = ImgNr_tmp ;Ausschnitt übernehemen
EndIf
EndIf
SaveImage(ImgNr, "Test.bmp");,#PB_ImagePlugin_BMP,10)
Update = 0
EndIf
EndIf
EndProcedure
SiBru