AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem beim DIB erstellen mit Palette
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim DIB erstellen mit Palette

Ein Thema von Muetze1 · begonnen am 1. Jan 2008 · letzter Beitrag vom 2. Jan 2008
 
Muetze1
(Gast)

n/a Beiträge
 
#1

Problem beim DIB erstellen mit Palette

  Alt 1. Jan 2008, 16:29
Hallo!

Ich bin dabei ein TGraphic Nachfahren zu programmieren für die Atari (bzw. Digital Research) IMG Bilder. Erstmal ist an dem Code noch nichts optimiert etc, Hauptsache er funktioniert soweit. Das tut er grundsätzlich auch, weil bisher habe ich die dekodierten Daten und Farbpaletten einem TBitmap gesetzt und diesen dann gemalt. Das klappt soweit alles einwandfrei. Nun ist es aber für ein TGraphic Nachkommen dumm, selbst intern ein TBitmap zu nutzen. Also alles umgeschrieben, so dass ich selber den DIB Speicher befülle und selber eine Palette erstelle. Ok, die Palettenerstellung klappt, weil als ich SetDIBColorTable() durch Zuweisung des Palettenhandles ersetzt habe beim Bitmap, ist alles ok. Die Dekodierung und Setzen der DIBits klappt (eigentlich) auch, da das Bild vom Inhalt her richtig dargestellt wird. Nur die Farbpalette stimmt nicht. Diese kann aber wiederrum nicht falsch sein, da sie ja vom TBitmap ordentlich dargestellt wird.

Zu Verdeutlichung mein aktuelles Testprojekt im Anhang. Darin befinden sich folgende Dinge:

- IMGFile.pas (der TGraphic Nachkomme)
- IMGViewer.dpr (das Projekt)
- Mainform.* (das Formular des Projektes)
- Intel.img (2 Farben Bild mit Farbpalette)
- MF144_ha.img (16 Farben Bild mit Farbpalette)

Das Testprojekt hat zZ. eine ComboBox oben rechts wo der Malmodus ausgewählt werden kann:
- WinAPI (der direkte Weg mit der GDI wie es am Ende auch sein sollte)
- FullBitmap (der alte Weg, welcher auch einwandfrei funktioniert)
- TBitmap use (Zwischenschritt wo TBitmap nur noch mißbraucht wird um HBITMAP und HPALETTE zugewiesen zu bekommen)

Nun für alle die so nett sind um mal ein Blick zu riskieren zu den Internas bzw. wo finde ich was:

Palette Erstellung
- BuildPaletteQuads() füllt eine Liste mit TRGBQuads mit der Palette (Anzahl wird durch fPaletteSize bestimmt)
- PaletteNeeded() erstellt das HPALETTE Handle, wenn dieses noch nicht vorhanden (=0) ist und weist es fPaletteHandle zu

Bitmap Erstellung
- HandleNeeded() erstellt das HBITMAP Handle, wenn dieses noch nicht vorhanden (=0) ist und weist es fDataHandle zu
(hier werden die geladenen Bit-Planes zu den DIBits dekodiert und geschrieben)

Zeichnen
- Draw() malt abhängig von DrawMode (siehe ComboBox) das Bild auf den übergebenen Canvas
(hier werden nur beim DrawMode == 1 (FullBitmap) die geladenen Bit-Planes direkt in die ScanLine[] dekodiert, alle andere Modien nutzen das fDataHandle von HandleNeeded())

Nun bin ich mal gespannt wo mein Fehler liegt. Ich bin zZ ratlos.

Gruss,
Muetze1
Angehängte Grafiken
Dateityp: png paldibprob_136.png (182,6 KB, 24x aufgerufen)
Angehängte Dateien
Dateityp: zip dibpalproblem_846.zip (96,3 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz