australopiteco Posted November 28, 2015 at 02:36 PM Report Share #590155 Posted November 28, 2015 at 02:36 PM ola, eu tenho que fazer uma função que reduza o tamanho de uma ColorImage.A cor do pixel na imagem comprimida deve corresponder à média das cores dos pixeis do respetivo quadrado da imagem original. static ColorImage Reduzi(ColorImage img, int x){ ColorImage imag = new ColorImage(img.getWidth()/x,img.getHeight()/x); int cr = 0; int cg = 0; int cb = 0; for(int i = 0;i < img.getWidth();i++){ for(int j = 0;j < img.getHeight();j++){ for(int l =i*x; l < i*x +x;l=l++){ for(int h =j * x;h < j*x +x;h++){ Color c =img.getColor(i,j); cr += c.getR() ; cg += c.getG() ; cb += c.getB() ; Color media = new Color(cr/(x*x),cg/(x*x),cb/(x*x)); imag.setColor(l,h,media); } } } } return imag; } O problema é que o codigo não está a funcionar.Quando vou reduzir a imagem diz que passou dos valores das cores[0-255]. Se alguem me pudesse ajudar agradecia. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted November 28, 2015 at 03:30 PM Report Share #590156 Posted November 28, 2015 at 03:30 PM qual o valor de x ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
australopiteco Posted November 28, 2015 at 03:47 PM Author Report Share #590157 Posted November 28, 2015 at 03:47 PM o valor de x é o que tu quiseres meter Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted November 28, 2015 at 07:35 PM Report Share #590168 Posted November 28, 2015 at 07:35 PM o valor de x é o que tu quiseres meter então apetece-me meter zero. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
australopiteco Posted November 29, 2015 at 01:29 PM Author Report Share #590194 Posted November 29, 2015 at 01:29 PM isso não me ajuda em nada Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted November 29, 2015 at 05:20 PM Report Share #590202 Posted November 29, 2015 at 05:20 PM qual o valor de x ? o valor de x é o que tu quiseres meter http://www.maisopiniao.com/perguntas-estupidas-merecem-respostas-parvas/ eu fiz uma pergunta muito concreta sobre um parâmetro da função, ao qual a tua resposta foi algo desprovida de qualquer tipo de informação. isto porque olhando para o código: // chamada que PARECE ser a origem o erro apresentado, já que essa informação também não foi providenciada ... Color media = new Color(cr/(x*x),cg/(x*x),cb/(x*x)); o único elemento que que está em falta é realmente o valor de x. agora, se estás à espera de milagres, estamos quase a chegar ao natal ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
australopiteco Posted November 29, 2015 at 05:40 PM Author Report Share #590205 Posted November 29, 2015 at 05:40 PM O x é o fator que se vai introduzir para reduzir a imagem.Por exemplo eu quero reduzir a imagem para metade do seu tamanho, então o valor de x é 2 e a cada quadrado de lado 2 da imagem original correponde a um pixel da nova imagem.O problema é que a cor dos pixels da nova imagem corresponde à media das cores dos pixels de cada quadrado de lado 2 da imagem original. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted November 29, 2015 at 05:46 PM Report Share #590207 Posted November 29, 2015 at 05:46 PM o problema de valores fora da gama esperada: Color media = new Color(min(cr/(x*x), 255), min(cg/(x*x), 255), min(cb/(x*x), 255)); node : isto resolve somente o problema da gama de valores, que é a questão apresentada no tópico IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
australopiteco Posted November 29, 2015 at 06:19 PM Author Report Share #590212 Posted November 29, 2015 at 06:19 PM Obrigado isso resolveu o problema, mas agora diz que tem um ponto invalido a meio da imagem. Eu penso que o problema esteja nos últimos dois for que percorrem os quadrados de lado x de modo a fazer a media das cores.Não sei se aquela expressão nos for(l = i*x) está certa. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted November 29, 2015 at 06:24 PM Report Share #590214 Posted November 29, 2015 at 06:24 PM node : isto resolve somente o problema da gama de valores, que é a questão apresentada no tópico Não sei se aquela expressão nos for(l = i*x) está certa. não, os ciclos estão claramente errados. o primeiro passo a fazer é : tenho que percorrer os pontos que vou criar e não os pontos "originais" depois de estares a percorrer os pontos a serem "pintados", terás de percorrer os pontos que irão contribuir para a cor final só assim terás a cor/média de cores que pretendes IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
australopiteco Posted November 29, 2015 at 07:27 PM Author Report Share #590217 Posted November 29, 2015 at 07:27 PM O codigo está assim, eu mudei os ciclos mas não sei se estão certos.Agora voltou a dar erro com a gama de valores das cores. static ColorImage Reduzir(ColorImage img, int x){ ColorImage imag = new ColorImage(img.getWidth()/x,img.getHeight()/x); int cr = 0; int cg = 0; int cb = 0; for(int i = 0;i < imag.getWidth();i++){ for(int j = 0;j < imag.getHeight();j++){ for(int l =x; l < img.getWidth();l+=x){ for(int h = x;h < img.getHeight();h+=x){ Color c =img.getColor(l,h); cr += c.getR() ; cg += c.getG() ; cb += c.getB() ; Color media = new Color(Math.min(cr/(x*x),255),Math.min(cg/(x*x),255),Math.min(cb/(x*x),255)); imag.setColor(i,j,media); } } } } return imag; } Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted November 29, 2015 at 09:29 PM Report Share #590219 Posted November 29, 2015 at 09:29 PM quais os pontos que contribuem para a média da cor a ser calculada ? esses ciclos estão mal IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
australopiteco Posted November 29, 2015 at 09:42 PM Author Report Share #590223 Posted November 29, 2015 at 09:42 PM Se eu quiser dividir a imagem para metade ( x=2) cada pixel da nova imagem equivale a um conjunto de quatro pixels da imagem original, portanto a media das cores de cada conjunto de quatro pixels da original equivale à cor de cada pixel da nova imagem.Penso que o meu problema é que eu não consigo criar um ciclo que percorra cada um desses conjuntos de pixels de modo a poder calcular a media. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted November 29, 2015 at 10:42 PM Report Share #590229 Posted November 29, 2015 at 10:42 PM pensa assim : "se eu estou a calcular a cor do pixel p(30, 10), quais os pixeis que contribuem para a cor final ?" IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
australopiteco Posted November 29, 2015 at 11:50 PM Author Report Share #590235 Posted November 29, 2015 at 11:50 PM Se me pudesses dizer concretamente como são os ciclos agradecia,pois já estou farto de perder tempo nisto XD Link to comment Share on other sites More sharing options...
HelpEachOther Posted December 10, 2015 at 11:07 AM Report Share #590515 Posted December 10, 2015 at 11:07 AM Eu acho que os teus primeiros 2 ciclos estão bem, mas e os segundos como acabaste por fazer? Link to comment Share on other sites More sharing options...
australopiteco Posted December 12, 2015 at 06:12 PM Author Report Share #590602 Posted December 12, 2015 at 06:12 PM o codigo funciona quem precisar está aqui: public static ColorImage Reduzir(ColorImage img, int x){ ColorImage imag = new ColorImage(img.getWidth()/x,img.getHeight()/x); for(int i = 0;i < imag.getWidth();i++){ for(int j = 0;j < imag.getHeight();j++){ int cr = 0; int cg = 0; int cb = 0; for(int l =i*x; l < i*x+x; l++){ for(int h =j*x; h <j*x+x; h++){ Color c =img.getColor(l,h); cr += c.getR() ; cg += c.getG() ; cb += c.getB() ; Color media = new Color(cr/(x*x),cg/(x*x),cb/(x*x)); imag.setColor(i,j,media); } } } } return imag; } Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted December 12, 2015 at 06:50 PM Report Share #590603 Posted December 12, 2015 at 06:50 PM continuo com dúvidas que isso esteja 100% IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now