Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   pf8Bit seltsames aussehen der Palette (https://www.delphipraxis.net/188819-pf8bit-seltsames-aussehen-der-palette.html)

EWeiss 11. Apr 2016 08:20

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Kannst du bitte grad sagen welcher Typ es ist?
Ich hänge mal das Beispiel an da ich jetzt nicht genau weiß welchen Typ ihr meint.

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

Medium 11. Apr 2016 08:33

AW: pf8Bit seltsames aussehen der Palette
 
Wie vermutet.
Delphi-Quellcode:
  ScanLines: TArray<PRGBTriple>;
  P: PRGBTriple;
Bei pf8Bit hast du keine RGBTriples mehr, sondern nur noch 1 Byte pro Pixel (8 Bit halt). Die richtigen Typen wären also:
Delphi-Quellcode:
  ScanLines: TArray<PByte>;
  P: PByte;
Das hier:
Delphi-Quellcode:
if Assigned(P) then HSLtoRGB(H, S, L, P^.rgbtRed, P^.rgbtGreen, P^.rgbtBlue);
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.

EWeiss 11. Apr 2016 08:42

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Bei pf8Bit hast du keine RGBTriples mehr, sondern nur noch 1 Byte pro Pixel (8 Bit halt). Die richtigen Typen wären also:
Hab ich mir schon gedacht das etwas im argen ist.. Sind halt Dinge die man wissen muss ;)
Wie schon gesagt zu wenig Erfahrung mit der Handhabung von ScanLine.

Zitat:

geht dann aber natürlich auch nicht mehr!
Ja. Wie du schon sagst, da es keine Farbwerte mehr gibt in den Pixeln.

Muss mal sehn wie ich das berechne zu mal das Bitmap jetzt auch noch umgekehrt gezeichnet wird.

gruss

EWeiss 11. Apr 2016 09:04

AW: pf8Bit seltsames aussehen der Palette
 
Boahh das dauert aber viel länger als mit den RGB Farben.

Delphi-Quellcode:
      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
Da muss ich wohl noch was Tüfteln :)

gruss

Neutral General 11. Apr 2016 09:25

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;

EWeiss 11. Apr 2016 09:30

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

ScanLine würde ich dann wieder mit pf32Bit versuchen.
Das geht leider nicht weil ich eine pf8Bit Palette verwende.
Die Farben der Palette werden also nicht geändert wenn ich pf32Bit verwende.


gruss

Neutral General 11. Apr 2016 09:42

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

EWeiss 11. Apr 2016 09:54

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Zitat von Neutral General (Beitrag 1335211)
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

Nein diese benutze ich um zur Laufzeit die Farben des Spectrogram zu ändern.
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

Neutral General 11. Apr 2016 09:57

AW: pf8Bit seltsames aussehen der Palette
 
Nagut dann eben 8-Bit. Sollte aber vom Prinzip genauso funktionieren.

EWeiss 11. Apr 2016 10:09

AW: pf8Bit seltsames aussehen der Palette
 
Zitat:

Zitat von Neutral General (Beitrag 1335215)
Nagut dann eben 8-Bit. Sollte aber vom Prinzip genauso funktionieren.

Sorry nein weil es nicht verdreht ist und eine Rotation von 90 Grad in dem Fall nichts bringt.
Es ist umgekehrt.

Zitat:

Okay war bei Scanline nicht das Problem dass du in erster Linie vertikal zeichnen musst?
Ich zeichne vertikal.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz