Grayscale

Autor: Edmar Souza Jr.

O Efeito Grayscale (Escala de cinza)

O efeito escala de cinza, como o próprio nome diz, visa transformar uma imagem colorida em uma imagem com tons de cinza (:P). Este é um efeito bem interessante, pois pode ser usado de diversas maneiras, tanto criando paisagens com ares misteriosos, tanto para servir como a paleta do jogo inteiro.

Como fazer a conversão?

Bom, vou apresentar aki duas técnicas de conversão: A conversão por porcentagem, e a conversão por média. Estas são apenas duas técnicas que eu conheço, mas podem haver mais.

Conversão por média

Este é sem dúvidas o modo mais simples de se fazer, mas também o mais precário. Tudo que fazemos com ele é pegar os valores dos componentes R, G e B e obtermos sua média. Fazemos isso com cada um dos componentes.

O código é o seguinte

r := (ir + ig + ib) div 3;
g := (ir + ig + ib) div 3;
b := (ir + ig + ib) div 3;

cor:= RGB(r,g,b);

ir, ig e ib são valores pegos previamente e representam respectivamente os componentes R, G e B do pixel selecionado. Podemos pegar esses valores usando as funções GetRValue, GetGValue e GetBValue, como no exemplo a seguir:

ir := GetRValue(Origem.Picture.Bitmap.Canvas.Pixels[x, y]);
ig := GetGValue(Origem.Picture.Bitmap.Canvas.Pixels[x, y]);
ib := GetBValue(Origem.Picture.Bitmap.Canvas.Pixels[x, y]);

Nada de mais né?

Entretanto…

Imagine que temos uma imagem dividida em três partes, sendo cada uma preenchida com uma cor diferente, vermelho, verde e azul. O que acontece? Ela vai ficar totalmente cinza. Como resolver isso?

Conversão por porcentagem

Este métódo eh um pouco mais complicado, mas não tanto, tudo o que fazemos é simplesmente usarmos a porcentagem dos componentes. A porcentagem de cada componente pode variar. Vamos ver um exemplo:

r := Trunc(0.3 * ir + 0.59 * ig + 0.11 * ib);
g := Trunc(0.3 * ir + 0.59 * ig + 0.11 * ib);
b := Trunc(0.3 * ir + 0.59 * ig + 0.11 * ib);

Simples certo? Quem me passou esta escala de porcentagem foi o Christiano, de acordo com ele esta é a escala usada pelo Photoshop. Bom, sendo ou não. Ela funciona 😀 e é o que importa.

Com isso, solucionamos o problema mencionado acima, pois estamos trabalhando com a porcentagem de cada componente. E não com a média de seus valores. Note por exemplo, que o resultado da média da cor vermelha, por exemplo, será igual ao resultado da média da cor verde:

Vermelho:

(255 + 0 + 0) / 3 = 85

Verde:

(0 + 255 + 0) / 3 = 85

Essa é a falha que ocorre na primeira técnica. Já na segunda técnica:

Vermelho:

76,5 + 0 + 0 = 76,5

Verde:

0 + 150,45 + 0 = 150,45

Notaram a diferença 😀

Bom, é isso ai e tenham um ótimo dia.

😉

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
 

Leave a Reply

Your email address will not be published. Required fields are marked *

Email
Print