![]() |
AW: pf8Bit seltsames aussehen der Palette
Zitat:
Mit ScanLine habe ich ein generelles Problem In Verbindung mit der Palette funktioniert das nicht mehr. (Ab einer bestimmten Größe einer Datei) Bei Pixel geht es allerdings werden hier die Farben falsch dargestellt in Verbindung mit HSLtoRGB. gruss |
AW: pf8Bit seltsames aussehen der Palette
Wie vermutet.
Delphi-Quellcode:
Bei pf8Bit hast du keine RGBTriples mehr, sondern nur noch 1 Byte pro Pixel (8 Bit halt). Die richtigen Typen wären also:
ScanLines: TArray<PRGBTriple>;
P: PRGBTriple;
Delphi-Quellcode:
Das hier:
ScanLines: TArray<PByte>;
P: PByte;
Delphi-Quellcode:
geht dann aber natürlich auch nicht mehr! Wenn du ein Bitmap mit Palette hast, hast du keine Farbwerte mehr in den Pixeln stehen, sondern einen Index in die Palette!! Statt also die Farben in die Pixeldaten zu schreiben, musst du dir für jeden Pixel eine Farbe aus der Palette aussuchen und deren Index in die Pixeldaten schreiben. Bitmaps mit Paletten sind da anders als die ohne.
if Assigned(P) then HSLtoRGB(H, S, L, P^.rgbtRed, P^.rgbtGreen, P^.rgbtBlue);
|
AW: pf8Bit seltsames aussehen der Palette
Zitat:
Wie schon gesagt zu wenig Erfahrung mit der Handhabung von ScanLine. Zitat:
Muss mal sehn wie ich das berechne zu mal das Bitmap jetzt auch noch umgekehrt gezeichnet wird. gruss |
AW: pf8Bit seltsames aussehen der Palette
Boahh das dauert aber viel länger als mit den RGB Farben.
Delphi-Quellcode:
Da muss ich wohl noch was Tüfteln :)
if bScanLines then
begin QueryPerformanceCounter(timeDraw0); k := BuffBMP.Height - i - 1; P := BuffBMP.ScanLine[k]; Move(P[OffsetX], P[0], (BuffBMP.Width - OffsetX)); for m := 0 to pred(OffsetX) do P[BuffBMP.Width - OffsetX + m] := Value; QueryPerformanceCounter(timeDraw1); timeDraw := timeDraw + (timeDraw1-timeDraw0); end gruss |
AW: pf8Bit seltsames aussehen der Palette
Okay war bei Scanline nicht das Problem dass du in erster Linie vertikal zeichnen musst?
Wie wärs wenn du das Bitmap um 90° gedreht zeichnest. Also statt ||||||||||||||||||||||||||||||||||||||||| so: _ _ _ _ _ _ _ Und dann kannst du das Bitmap per PlgBlt um 90° gedreht dahin zeichnen wo es auftauchen soll. ScanLine würde ich dann wieder mit pf32Bit versuchen.
Delphi-Quellcode:
// Malt das Bitmap um 90° nach rechts gedreht auf ein Canvas
procedure DrawRotated90(ABitmap: TBitmap; ACanvas: TCanvas; AX, AY: Integer); var RotatePoints: Array[0..2] of TPoint; begin RotatePoints[0] := Point(ABitmap.Height+AX, AY); RotatePoints[1] := Point(ABitmap.Height+AX, ABitmap.Width+AY); RotatePoints[2] := Point(AY, AY); PlgBlt(ACanvas.Handle, RotatePoints[0], ABitmap.Canvas.Handle, 0, 0, ABitmap.Width, ABitmap.Height, 0, 0, 0); end; procedure TForm1.Button1Click(Sender: TObject); begin DrawRotated90(Image1.Picture.Bitmap, Canvas, 10, 10); end; |
AW: pf8Bit seltsames aussehen der Palette
Zitat:
Die Farben der Palette werden also nicht geändert wenn ich pf32Bit verwende. gruss |
AW: pf8Bit seltsames aussehen der Palette
Ich rede ja davon in diesem Fall KEINE Palette mehr zu benutzen.
Die Palette benutzt du doch nur weil du hoffst dass es damit schneller geht oder? Meine neue Idee für "schneller" ist halt 32-Bit "falschrum" malen und dann drehen. Siehe meinen vorherigen Post |
AW: pf8Bit seltsames aussehen der Palette
Zitat:
Vordefinierte Farben also. ;) Vorherige Version mit der Geschwindigkeit war ausreichend nur nach der Umstellung auf Paletten muss ich diese wieder optimieren was die Geschwindigkeit angeht incl. der korrekten Farben Zuweisung. gruss |
AW: pf8Bit seltsames aussehen der Palette
Nagut dann eben 8-Bit. Sollte aber vom Prinzip genauso funktionieren.
|
AW: pf8Bit seltsames aussehen der Palette
Zitat:
Es ist umgekehrt. Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16: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