Avatar billede geek Nybegynder
27. august 2000 - 14:06 Der er 9 kommentarer og
3 løsninger

farve ændring på pixel

Jeg har hentet farven ind fra en/et pixel ved hjælp af
image1.Canvas.Pixels[x, y];
jeg har så farven som en TColor.
Og her er så ?\'et, hvordan deler jeg farven ud i 3, altså :
1 R
1 G 
1 B
Avatar billede pellelil Nybegynder
27. august 2000 - 15:41 #1
Det er ikke så svært en TColor er en 4 byte værdi, og du skal \"bare\" læse/skrive de enkelte bytes. Her har du 2 funktioner du kan bruge:

Procedure GetRGBValue(rgbColor : TColor; Var uiRed, uiGreen, uiBlue : Byte);
begin
  uiBlue := rgbColor and $FF;
  rgbColor := rgbColor shr 8;
  uiGreen := rgbColor and $FF;
  rgbColor := rgbColor shr 8;
  uiRed := rgbColor and $FF;
end;


Function  SetRGBValue(uiRed, uiGreen, uiBlue : Byte) : TColor;
begin
  Result := $00;  // Flag
  Result := Result shl 8;
  Result := Result or uiRed;
  Result := Result shr 8;
  Result := Result or uiGreen;
  Result := Result shr 8;
  Result := Result or uiBlue;
end;



Avatar billede delphij Nybegynder
27. august 2000 - 17:58 #2
Vha. ColorToRGB(), GetRValue, GetGValue og GetBValue


Eks.

var
  R,G,B : Longint;
begin
  ...
  R := GetRValue(ColorToRGB(ClAqua));
  G := GetGValue(ColorToRGB(ClAqua));
  B := GetBValue(ColorToRGB(ClAqua));
  ...
end;

God fornøjelse
J
Avatar billede delphij Nybegynder
27. august 2000 - 18:00 #3
Beklager min fejltagelse!

Stryg ColorToRGB()!!!

Altså
Eks.

var
  R,G,B : Longint;
begin
  ...
  R := GetRValue(ClAqua);
  G := GetGValue(ClAqua);
  B := GetBValue(ClAqua);
  ...
end;

God fornøjelse
J
Avatar billede speedy Nybegynder
27. august 2000 - 22:26 #4
delphij>>

Du skal ikke stryge ColorToRGB!!!

Hvis f.eks. at du som i dit eksempel har brugt de forud-definerede farver (clAqua osv..) kan den ikke lave dem om til RGB hvis du ikke bruger ColorToRGB først.

så geek>>

Brug ColorToRGB, den er ikke altid nødvendig, men det er den nogle gange. Så for en sikkerheds skyld. Brug den :))

/SpEeDy
Avatar billede borrisholt Novice
28. august 2000 - 11:40 #5
Den det med ColorToRGB kam man helt udelade hvis ellers man selv skriver sine funktioner til at splitte en TColor af i tre dele.

Jeg foreslår det følgende

Function RGB(r, g ,b : byte) : TColor;
asm
  and eax, $ff
  and edx, $ff
  shl edx, $08
  or eax, edx
  xor edx,edx
  mov dl,cl
  shl edx,$10
  or eax,edx
end;

Function GetRed(Color : TColor) : Byte;
asm
  lea eax, [eax]
end;

Function GetGreen(Color : TColor) : Byte;
asm
  shr eax, $8
end;

Function GetBlue(Color : TColor) : Byte;
asm
  shr eax, $10
end;

De funktioner virker også selvom at du stopper en
pre defineret farve ind i dem ...

Jens B
Avatar billede pellelil Nybegynder
28. august 2000 - 11:47 #6
borrisholt>  Ro på \"mulde\", Assembler og så på en mandag  :-)
Avatar billede borrisholt Novice
28. august 2000 - 11:49 #7
mandag morgen, tilmed FØR klokken 7 !

Jens B
Avatar billede pellelil Nybegynder
28. august 2000 - 11:56 #8
Ja hvis det er SÅ TIDELIGT så må du sku\' hellere gå direkte til doktoren :-)
Avatar billede borrisholt Novice
28. august 2000 - 11:59 #9
Jeg sidder lige og roder med noget C++ Jeg ikke rigtig kan få til at virke ... Kunne du ikke lige kigge på det ?

#Define SneVejr Skrammel
#Define SolSkin Godt


void * be_pissed()
{
  wirte_assemblerCode_in_Eksperten();
}


void main()
{
  if (Day == Mandag  && Tidspunkt == Morgen)
  {
    while (Vejr == SeeVejr)
    {
      be_pissed();
      try
      {
        do_some_thing_about_it()
      }
      except
      {
        be_pissed();
      }       
    }
    smile();
  } 
}

Jens B
Avatar billede geek Nybegynder
29. august 2000 - 22:00 #10
Mange tak for svarende
Avatar billede delphi Nybegynder
11. september 2000 - 12:20 #11
Borris>> Genialt svar!!!  Lige noget der kan mundre lidt op en helt anden mandag..
Avatar billede delphi Nybegynder
11. september 2000 - 12:21 #12
Munter = Munder  ;>  (Den er sgu svær at tale sig fra - der er ellere ret langt fra D til T på mit tastatur..)
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

IT-JOB

Netcompany A/S

Linux Operations Engineer

Politiets Efterretningstjeneste

IT-løsningsarkitekt i PET

Capgemini Danmark A/S

Client Partner