AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmap auf 8bit mittels vorhandener Palette
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap auf 8bit mittels vorhandener Palette

Ein Thema von Brainstalker · begonnen am 27. Mär 2010 · letzter Beitrag vom 28. Mär 2010
 
Benutzerbild von Brainstalker
Brainstalker

Registriert seit: 9. Jan 2004
Ort: Berlin
176 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Bitmap auf 8bit mittels vorhandener Palette

  Alt 27. Mär 2010, 20:07
Ok Vektorrechnung sollte nicht das Problem sein. Hatte in der Uni erst letztes Semester Lineare Algebra.
Wie mache ich das am besten, sollte ich da dann von Nullvektor aus gehen und dann die differenz der beiden Vektoren ausrechnen? Und kann ich da einfach übers Skalarprodukt gehen?

Mir reicht auf jeden Fall erst mal der RGB Farbraum. Sicherlich wäre es besser über HSL zu gehen, da man dort die Helligkeit einbeziehen kann, aber mir erstmal nicht so wichtig. Werd ich vielleicht als zweite Implementation später hinzufügen. Dann könnte man auch beide vergleichen.
Der L*a*b*-Farbraum hört sich sehr interessant an. Den werd ich zwar hierfür nicht einsetzen, aber ich glaub da werde ich mich auf jeden Fall mal einarbeiten. Für andere Projekte.


Ich hab leider für die nächste Zeit kein Delphi, und mache das alles erstmal theoretisch. Meine erste Überlegung sieht folgendermaßen aus, wie gesagt nicht getestet.
Delphi-Quellcode:
TRGB = record
  r: byte;
  g: byte;
  b: byte;
end;

TPalette = array[0..255] of TRGB;



function Skalar(const aVector: TRGB): integer;
begin
  result := aVector.r * aVector.r
         + aVector.g * aVector.g
         + aVector.b * aVector.b;
end;


function GetNearestColor(const aColor: TRGB): integer;
var
   ind, smallest, diff: integer;
begin
  ind := 0;
  smallest := High(Palette);
  
  for i := 0 to High(Palette) do // Palette mit 256 Einträgen
  begin
    diff := Skalar(aColor) - Skalar(Palette[i]);
    if diff < 0 then diff := diff * (-1);
    
    if diff < smallest then
    begin
      ind := i;
      smallest := diff;
    end;
  end;
  
  result := ind;
end;
Michael N.
Brainstalker
  Mit Zitat antworten Zitat
 


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