FarbTiefe bei GrabImage ?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

FarbTiefe bei GrabImage ?

Beitrag von sibru »

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 ?

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
Danke im Vorraus...
SiBru
Bild Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

bei Image und Farbtiefe ist die native Lib von PB nicht sehr komfortabel.
also vermutlich machst du nix falsch, es geht nur einfach nicht sauber ohne API.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dige
Beiträge: 1245
Registriert: 08.09.2004 08:53

Beitrag von dige »

Das hört sich das nach nem BGR - RGB Problem an. Schau mal ob Du
irgendwo mit APIs rumhantierst oder direkt auf den Speicher zugreifst.
Da musst Du dann beachten das die ByteReihenfolge nicht R G B ist sondern
B G R ... wegen Endian Format ...
"Papa, ich laufe schneller - dann ist es nicht so weit."
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Beitrag von sibru »

@dige: jeb, das war´s... :allright:

Nu klappt alles wunderprächtig... Danke :wink:
Bild Bild
Antworten