Avatar billede athlon-pascal Juniormester
16. november 2003 - 16:18 Der er 5 kommentarer og
1 løsning

RGB (TColor) til RYB (Red Yellow Blue) og omvendt

Jeg søger et par funktioner, der kan konvertere en RGB-farve (TColor) til en RYB-farve (Red Yellow Blue).

Noget i den her retning:

type
  TRYBColor = record
    Red: Double; // Double for at undgå evt. kvalitetstab, skal gå fra 0 til 1
    Yellow: Double; // Skal gå fra 0 til 1
    Blue: Double; // Skal gå fra 0 til 1
  end;

function RGB2RYB(RGB: TColor): TRYBColor;
begin
  // kode ...
end;

function RYB2RGB(RYB: TRYBColor): TColor;
begin
  // kode ...
end;

Jeg bruger Delphi 7 Personal under Windows XP :-)

På forhånd tak :-)
Avatar billede tauron Nybegynder
16. november 2003 - 16:47 #1
Du mener sikkert RGB (ref, green, blue)

En Delphi tcolor er en 32bit integer pakket med 3* 8 bit for de tre farver.

Nedenstående er et klip fra et af mine programmer - jeg håber du kan bruge det som inspiration:



type
  trgb = record r, g, b: byte end;


function colorvalue(rgb: trgb): tcolor;
begin
  with rgb do colorvalue := (b shl 8 + g) shl 8 + r;
end;

function rgbvalue(rgb: trgb): string;
begin
  with rgb do
  rgbvalue := 'RGB=('+long2strs(r)+','+long2strs(g)+','+long2strs(b)+')';
end;

procedure color2rgb(c: tcolor; var rgb: trgb);
begin
  with rgb do
  begin
    r := c and $ff; c := c shr 8;
    g := c and $ff; c := c shr 8;
    b := c and $ff;
  end;
end;
Avatar billede athlon-pascal Juniormester
16. november 2003 - 16:51 #2
Jeg mener Rød Gul Blå, og ved godt, at det ikke lige er at finde i nogen skærm-standard...
Avatar billede athlon-pascal Juniormester
16. november 2003 - 17:00 #3
Jeg vil kunne arbejde med komplementær-farver - læs evt. her: http://www.html.dk/artikler/00021/
Avatar billede zerohero Nybegynder
16. november 2003 - 18:45 #4
Hvad med om du konventerede dine RGB vaerdier til CMYK (Cyan Magenta Yellow Key)


Function CMYK(c, m, y, k: Byte): COLORREF;

Similar to RGB function but for CMYK color coordinates.

GetCMYCK color

Function GetCValue(cmyk: COLORREF): Byte;
Function GetMValue(cmyk: COLORREF): Byte;
Function GetYValue(cmyk: COLORREF): Byte;
Function GetKValue(cmyk: COLORREF): Byte;

Der kan du snuppe din Gule farve vaerdi, ogsaa ellers tage R og B fra din RGB farve....

Held og Lykke
ZeroHero
Avatar billede athlon-pascal Juniormester
16. november 2003 - 20:25 #5
zerohero -> Det tvivler jeg på, da man også kan få Y-værdien i CMYK på følgende måde:

CMYK.Y := 255 - GetBValue(RGBColorRef);

De data der ligger i G-værdien i RGB-farven vil derfor "forsvinde" ved konverteringen...
Avatar billede athlon-pascal Juniormester
28. november 2003 - 21:40 #6
Lukketid :-(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis