Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#1

Farbtabelle eines TBitmap bearbeiten?

  Alt 16. Jun 2020, 14:29
Irgendwie bin ich zu doof das zu finden, wie man sowas macht.

Im Prinzip wollte ich einfach nur schnell einen 4-Bit-Stream in Bitmap.Scanline kopieren
und das als Graustufen sehen, ohne erst die Pixel einzeln umrechnen zu müssen,
aber aktuell sieht das Bild dann sehr farbenfroh aus, selbst wenn ich vorher das Monochrom-Property setze.

Inzwischen das Palette-Property entdekt, darüber mit dem Typ HPALETTE bei MSDN-Library durchsuchenSetPaletteEntries gelandet, aber hatte leider noch keine Wirkung, der erste Versuch.

[EDIT]
Grade nochmal nach "Delphi SetPaletteEntries" gesucht und
https://www.imageen.com/ieforum/topic.asp?TOPIC_ID=2673 entdeckt.
* CreatePalette, ResizePalette,
* SetPaletteEntries,
* SelectPalette, RealizePalette
Mal sehn ob dieser "nichtfunktionierende" Code nicht doch geht.
[EDIT2]
Nee, ging nicht.

Ich bekomm einen Datanstrom aus Bytes, mit 4 Bit pro Pixel in Graustufen,
und den schiebe ich direkt in ein TBitMap, aber die farbliche Datstellung ... naja

Der zweite Block ist das was aktuell als Testcode existiert.
Delphi-Quellcode:
var Bytes := FingerSensor.AcquireFingerImage;
var Width := Sqrt(Length(Bytes) * 2);
meLog.Lines.Add(' Bytes: ' + Length(Bytes).ToString);
meLog.Lines.Add(' ImageSize: ' + Width.ToString);
imFingerImage.Picture.Bitmap.PixelFormat := pf4bit;
imFingerImage.Picture.Bitmap.SetSize(Trunc(Width), Trunc(Width));
Move(Bytes[0], imFingerImage.Picture.Bitmap.ScanLine[imFingerImage.Picture.Bitmap.Height - 1]^,
  imFingerImage.Picture.Bitmap.Width * imFingerImage.Picture.Bitmap.Height div 2);

const Grays: TArray<TColor> = [$00000000, $00111111, $00222222, $00333333,
         $00444444, $00555555, $00666666, $00777777, $00888888, $00999999,
         $00AAAAAA, $00BBBBBB, $00CCCCCC, $00DDDDDD, $00EEEEEE, $00FFFFFF];
var HPalette := imFingerImage.Picture.Bitmap.Palette;
SetPaletteEntries(HPalette, 0, 16, (@Grays[0])^);
//imFinger.Picture.Bitmap.Palette := HPalette;
imFingerImage.Picture.Bitmap.Palette := SelectPalette(imFingerImage.Picture.Bitmap.Canvas.Handle, HPalette, True);
//CreateHalftonePalette(DC: HDC)

imFingerImage.Refresh;
Miniaturansicht angehängter Grafiken
formdesign-1-nach-dokumentation.png  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Jun 2020 um 18:46 Uhr)
  Mit Zitat antworten Zitat