• 0
Sign in to follow this  
MrChez

Rgb

Question

Boa tarde Pessoal!

Preciso "pegar" os valores RGB de um pixel em determinada imagem, mas atualmente apenas consigo o valor em números.

Tentei usar canvas, mas não obtive o resultado esperado!

Tem alguma forma para obter esses valores separados?

Tem como alterar esses valores depois? Pois tenho que mudar a cor do pixel conforme pedido do usuário!

muito obrigado!

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Churc,

obrigado pela atenção, mas não entendi muito bem o seu código....

o código é bem avançado e eu preciso algo + simples, tvz por isso não consegui entender!

pelo que entendi, você tem todos os valores juntos, mas eu preciso do valor de cada item, um para cada cor.

não sei c fui bem claro....

Abraço

Churc,

dá uma olhada nisso:

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

var

msg : string;

begin

msg := '';

msg := 'Red: ' + IntToStr(GetRValue(Image1.Canvas.Pixels[X,Y]));

msg := msg + ' || Green: ' + IntToStr(GetGValue(Image1.Canvas.Pixels[X,Y]));

msg := msg + ' || Blue: ' + IntToStr(GetBValue(Image1.Canvas.Pixels[X,Y]));

form1.caption := msg;

end;

É um TImage que carrega uma imagem.

Coloqei os valores no título do form só pra ver eles mudando.

C algum dia alguém + precisar d algo parecido, tá aí uma contribuição pro fórum ;)

Agora preciso transformar esses valores em hexadecimal.

E depois alterar o valor do pixel da imagem.

C tiver alguma coisa que possa me ajudar, fico agradecido!

Abraço

Share this post


Link to post
Share on other sites
  • 0

opa

Que bom que você conseguiu....

Se eu entendi bem, seria mais ou menos assim

Pra alterar o pixel da imagem é mesma coisa que você está fazendo

pra pegar o Pixel, ai só passar um TColor... exemplo

var

RGB: TColor;

begin

RGB := $00FFFFFF; //Branco

Image1.Canvas.Pixels[0,0] := RGB;

RGB := $00000000; //Preto

Image1.Canvas.Pixels[0,1] := RGB;

Logo o Pixel X = 0 e Y = 0 vai ser branco e o Pixel X = 0 e Y = 1 vai ser preto...

Pra transformar de TColor para Hexadecimal você pode usar

a seguinte função

function TColorToHex(Color : TColor) : string;
begin
   Result :=
     IntToHex(GetRValue(Color), 2) +
     IntToHex(GetGValue(Color), 2) +
     IntToHex(GetBValue(Color), 2);
end;
Pra usar serial var Hex: String; RGB: TColor; begin RGB := $00FFFFFF; //Branco Hex := TColorToHex(RGB); Pra transformar de Hex pra TColor
function HexToTColor(sColor : string) : TColor;
begin
   Result :=
     RGB(
       StrToInt('$'+Copy(sColor, 1, 2)),
       StrToInt('$'+Copy(sColor, 3, 2)),
       StrToInt('$'+Copy(sColor, 5, 2))
     );
end;

Pra usar seria exemplo

var

Hex: String;

RGB: TColor;

begin

RGB := $00FFFFFF; //Branco

Hex := TColorToHex(RGB);

RGB := HextoTColor(Hex);

e por ai vai...

Entendeu mais ou menos?

abraço

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this