Jump to content
dremo92

[Resolvido] Duvida: Fazer Percentagem

Recommended Posts

dremo92

Boas pessoal

tenho de colocar uma imagem em sepia.

os valores para colocar a imagem a sepia são estes:

INT R = 40%*r + 77%*g + 20%*b #(sendo que r , g , b são os valores originais)

INT G = 35%r + 69%g + 77%b # (sendo que R, G, B são os valores para tornar o tom em sepia)

INT B = 27%r + 53%g + 13%b

o meu problema consiste que o tenho de guardar estes valores em variaveis, pois pode existir outras variantes de peso e tem de haver uma facil manipulação.

Color SEPIAR = new Color(40,77,20);

Color SEPIAG = new Color(35,69,17); //sabendo que a COLOR so recebe inteiros (r,g,b) e vão de 0 a 256

Color SEPIAB = new Color(27,53,13);

so que são valores inteiros nao posso por percentagem e o "CATCH" não funciona.

sendo assim pensei da seguinte maneira:

img.getColor(x,y) - devolve uma cor naquela posiçao da imagem (naquele pixel)

getR() - devolve me um inteiro com o valor de r

img.setColor(x,y,Color) - pinta um pixel da imagem nas cordenadas (x,y) com determinada cor.

for (int x=0; x<img.getWidth(); x++){
for (int y=0; y<img.getHeight(); y++){
int R = (img.getColor(x, y).getR()*(SEPIAR.getR())/100) + (img.getColor(x, y).getG()*(SEPIAR.getG())/100) + (img.getColor(x, y).getB()*(SEPIAR.getB())/100);
int G = (img.getColor(x, y).getR()*(SEPIAG.getR())/100) + (img.getColor(x, y).getG()*(SEPIAG.getG())/100) + (img.getColor(x, y).getB()*(SEPIAG.getB())/100);
int B = (img.getColor(x, y).getR()*(SEPIAB.getR())/100) + (img.getColor(x, y).getG()*(SEPIAB.getG())/100) + (img.getColor(x, y).getB()*(SEPIAB.getB())/100);

Color sepiac = new Color(R,G,B);

img.setColor(x, y, sepiac);}
}

dá me o erro de que estou a exceder o valor de r,g,b ou seja passo os 256.

Se me poderem ajudar

obrigado

Edited by dremo92

Cumpriementos

André Mota

Share this post


Link to post
Share on other sites
HappyHippyHippo
Color color = img.getColor(x, y);

int R = (int) (color.getR() * ( (double)SEPIAR.getR() / 100 )) +
       (int) (color.getG() * ( (double)SEPIAR.getG() / 100 )) +
       (int) (color.getB() * ( (double)SEPIAR.getB() / 100 ));

int G = (int) (color.getR() * ( (double)SEPIAG.getR() / 100 )) +
       (int) (color.getG() * ( (double)SEPIAG.getG() / 100 )) +
       (int) (color.getB() * ( (double)SEPIAG.getB() / 100 ));

int B = (int) (color.getR() * ( (double)SEPIAB.getR() / 100 )) +
       (int) (color.getG() * ( (double)SEPIAB.getG() / 100 )) +
       (int) (color.getB() * ( (double)SEPIAB.getB() / 100 ));


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
dremo92

Color color = img.getColor(x, y);

int R = (int) (color.getR() * ( (double)SEPIAR.getR() / 100 )) +
	(int) (color.getG() * ( (double)SEPIAR.getG() / 100 )) +
	(int) (color.getB() * ( (double)SEPIAR.getB() / 100 ));

int G = (int) (color.getR() * ( (double)SEPIAG.getR() / 100 )) +
	(int) (color.getG() * ( (double)SEPIAG.getG() / 100 )) +
	(int) (color.getB() * ( (double)SEPIAG.getB() / 100 ));

int B = (int) (color.getR() * ( (double)SEPIAB.getR() / 100 )) +
	(int) (color.getG() * ( (double)SEPIAB.getG() / 100 )) +
	(int) (color.getB() * ( (double)SEPIAB.getB() / 100 ));

obrigado hippo mas Não fonciona no erro diz:

Invalid value: 257 (valid range: 0-255)

será que deva limitar caso exceda o valor? a questão é se o suposto é por uma percentagem por cima daquela cor não deveria ser necessário..


Cumpriementos

André Mota

Share this post


Link to post
Share on other sites
HappyHippyHippo

limita os valores:

int R = (int) (color.getR() * ( (double)SEPIAR.getR() / 100 )) +
       (int) (color.getG() * ( (double)SEPIAR.getG() / 100 )) +
       (int) (color.getB() * ( (double)SEPIAR.getB() / 100 ));

int G = (int) (color.getR() * ( (double)SEPIAG.getR() / 100 )) +
       (int) (color.getG() * ( (double)SEPIAG.getG() / 100 )) +
       (int) (color.getB() * ( (double)SEPIAG.getB() / 100 ));

int B = (int) (color.getR() * ( (double)SEPIAB.getR() / 100 )) +
       (int) (color.getG() * ( (double)SEPIAB.getG() / 100 )) +
       (int) (color.getB() * ( (double)SEPIAB.getB() / 100 ));

R = R > 255 ? 255 : (R < 0 ? 0 : R);
G = G > 255 ? 255 : (G < 0 ? 0 : G);
B = B > 255 ? 255 : (B < 0 ? 0 : B);

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
dremo92

limita os valores:

int R = (int) (color.getR() * ( (double)SEPIAR.getR() / 100 )) +
	(int) (color.getG() * ( (double)SEPIAR.getG() / 100 )) +
	(int) (color.getB() * ( (double)SEPIAR.getB() / 100 ));

int G = (int) (color.getR() * ( (double)SEPIAG.getR() / 100 )) +
	(int) (color.getG() * ( (double)SEPIAG.getG() / 100 )) +
	(int) (color.getB() * ( (double)SEPIAG.getB() / 100 ));

int B = (int) (color.getR() * ( (double)SEPIAB.getR() / 100 )) +
	(int) (color.getG() * ( (double)SEPIAB.getG() / 100 )) +
	(int) (color.getB() * ( (double)SEPIAB.getB() / 100 ));

R = R > 255 ? 255 : (R < 0 ? 0 : R);
G = G > 255 ? 255 : (G < 0 ? 0 : G);
B = B > 255 ? 255 : (B < 0 ? 0 : B);

Obrigado hippo era mesmo isso...então ja funcionou xD


Cumpriementos

André Mota

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.