AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein pf8Bit seltsames aussehen der Palette
Thema durchsuchen
Ansicht
Themen-Optionen

pf8Bit seltsames aussehen der Palette

Ein Thema von EWeiss · begonnen am 10. Apr 2016 · letzter Beitrag vom 18. Apr 2016
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: pf8Bit seltsames aussehen der Palette

  Alt 11. Apr 2016, 08:04
Wie verwendest du Scanline hier? Insbesondere der Typ des Pointer wäre hier interessant.
Genau so wie im original Sample nur das ich für das Bitmap vorher eine Palette in pf8Bit erstelle.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: pf8Bit seltsames aussehen der Palette

  Alt 11. Apr 2016, 08:11
Genau so wie im original Sample nur das ich für das Bitmap vorher eine Palette in pf8Bit erstelle.
Hab jetzt nicht alle beide Threads komplett durchgelesen. Kannst du bitte grad sagen welcher Typ es ist?
Was Medium und ich schätzen ist, dass du einen Pointertyp benutzt der größer als 1 Byte ist und du somit Pixel überspringst und dadurch seltsame Ergebnisse bekommst.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: pf8Bit seltsames aussehen der Palette

  Alt 11. Apr 2016, 08:20
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

Geändert von EWeiss (11. Apr 2016 um 09:34 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: pf8Bit seltsames aussehen der Palette

  Alt 11. Apr 2016, 08:33
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: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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: pf8Bit seltsames aussehen der Palette

  Alt 11. Apr 2016, 08:42
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: pf8Bit seltsames aussehen der Palette

  Alt 11. Apr 2016, 09:04
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

Geändert von EWeiss (11. Apr 2016 um 09:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: pf8Bit seltsames aussehen der Palette

  Alt 11. Apr 2016, 09:25
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;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:00 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