![]() |
Bitmap / Palette
Hallo,
wie kann ich verschiedene Paletten für Bitmaps speichern und dann einzelnen Bitmaps eine bestimmte Palette zuweisen?? Ich dachte es in etwa so:
Delphi-Quellcode:
Leider funktioniert es so nicht.
BitmapP : Array[0..10 ] of Tbitmap;
PaletteArray : Array[0..10] of HPALETTE; //... //... For X := 0 to 10 do begin BitmapP[X] := Tbitmap.create; BitmapP[X].PixelFormat := pf4bit; BitmapP[X].SetSize(1,1); PaletteArray[X] := BitmapP[X].Palette; GetPaletteEntries(PaletteArray[X], 0, 15, farbe); //Palette manipulieren //(die Zuweisung der Farben nur hier nur als Beispiel) for I := 0 to 15 do begin farbe[I].peRed := (20 * X) + I; farbe[I].peGreen := (20 * X) + I; farbe[I].peBlue := (20 * X) + I; end; SetPaletteEntries(PaletteArray[X], 0, 15, farbe); end; end; //... //... Bitmap := Tbitmap.create; Bitmap.PixelFormat := pf4bit; Bitmap.Palette := PaletteArray[0] // oder 1,2,... //... / :roll: /... // und später im Programm einfach nur noch Bitmap.ReleasePalette; Bitmap.Palette := PaletteArray[5] LOGPALETTE habe ich auch schon gefunden, aber da kann ich nur einen Farbwert zuweisen.(warum auch immer?!?!? :roll: ) Kann ich aus einer HPalette eine Logpalette erstellen??? (z.B. createLogPalette(HPalette); LOGMaxPALETTE(oder so ähnlich) geht glaube ich nur mit 256 Farben Besten Dank für jede Hilfe und jeden Hinweis Gruß EarlyBird |
Re: Bitmap / Palette
Keine Ideeen oder Vorschläge etc.!?!?
die Frage ist: □ unpräziese □ missveständlich □ zu leicht □ zu schwierig □ schon zu oft gelöst □ ????????????? □ __________________________ :?: :?: :roll: :lol: :idea: :???: Danke |
Re: Bitmap / Palette
Willst du das wirklich wissen? :roll:
Ich stelle dir hier mal einen Teil einer Procedure von mir rein, welche bestimmte Farben in einem Bitmap umfärbt. Ich stelle den Teil für die palettenbasierten Bitmaps rein, ich denke damit solltest du genug Ideen bekommen. Ansonsten nochmal nachfragen.
Delphi-Quellcode:
// changes given color in bitmap to new one
Procedure MapColor(Const ABitmap : TBitmap; Const AOldColor, ANewColor : TColor); Var i, j, // 2, 16, 256 Colors lPaletteEntries : Integer; lPalette : TDIBPalette; lLastGDIObj : HGDIOBJ; // Old Color, New Color lQuadOldColor, lQuadNewColor : TRGBQuad; lWordOldColor, lWordNewColor : Word; Begin Assert(Assigned(ABitmap), 'MapColor(): ABitmap is not assigned!'); lQuadOldColor.rgbRed := GetRValue(ColorToRGB(AOldColor)); lQuadOldColor.rgbGreen := GetGValue(ColorToRGB(AOldColor)); lQuadOldColor.rgbBlue := GetBValue(ColorToRGB(AOldColor)); lQuadOldColor.rgbReserved := 0; lQuadNewColor.rgbRed := GetRValue(ColorToRGB(ANewColor)); lQuadNewColor.rgbGreen := GetGValue(ColorToRGB(ANewColor)); lQuadNewColor.rgbBlue := GetBValue(ColorToRGB(ANewColor)); lQuadNewColor.rgbReserved := 0; If ( ABitmap.PixelFormat In [pf1Bit, pf4Bit, pf8Bit] ) Then Begin lLastGDIObj := SelectObject(ABitmap.Canvas.Handle, ABitmap.Handle); Try lPaletteEntries := GetDIBColorTable(ABitmap.Canvas.Handle, 0, 256, lPalette); If ( lPaletteEntries > 0 ) Then Begin For i := 0 To ( lPaletteEntries - 1 ) Do Begin If ( ( lPalette[i].rgbRed = lQuadOldColor.rgbRed ) And ( lPalette[i].rgbGreen = lQuadOldColor.rgbGreen ) And ( lPalette[i].rgbBlue = lQuadOldColor.rgbBlue ) ) Then lPalette[i] := lQuadNewColor; End; SetDIBColorTable(ABitmap.Canvas.Handle, 0, lPaletteEntries, lPalette); End; Finally SelectObject(ABitmap.Canvas.Handle, lLastGDIObj); End; End Else // kein Farbtabellen-Bitmap (15 Bit und höher) begin // *schnipp* end; end; |
Re: Bitmap / Palette
@Muetze: Anstelle von
Delphi-Quellcode:
kannst du auch
If ( ( lPalette[i].rgbRed = lQuadOldColor.rgbRed ) And
( lPalette[i].rgbGreen = lQuadOldColor.rgbGreen ) And ( lPalette[i].rgbBlue = lQuadOldColor.rgbBlue ) ) Then lPalette[i] := lQuadNewColor;
Delphi-Quellcode:
schreiben
if CompareMem(@lPalette[i], @lQuadOldColor, 3) then
lPalette[i] := lQuadNewColor; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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