Fala galera. Seguinte, no meu programa eu to colocando agora a opção de trocar a resolução das imagens editadas. Só que, para tanto, eu tenho que pegar cada desenho feito modificar sua a localidade das extremidades. Consegui fazer funcionar muito bem com retângulos, círculos e até linhas livres, mas com polígonos não tá dando muito certo. acompanhem o código.
/* (non-Javadoc)
* @see br.ericware.desenhos.Desenho#setFimX(int)
*/
@Override
public Desenho setFimX(int fimX) {
// TODO Auto-generated method stub
if(fimX != this.getFimX()){
int origem = this.getOrigemX();
float escala = (fimX - this.getOrigemX()) /(float)this.poligono.getBounds().width;
AffineTransform af = new AffineTransform();
af.setToTranslation(-this.getOrigemX(),0);
modificaPoligono(af);
af.setToScale(escala,1);
modificaPoligono(af);
af.setToTranslation(origem,0);
modificaPoligono(af);
}
return this;
}
/* (non-Javadoc)
* @see br.ericware.desenhos.Desenho#setFimY(int)
*/
@Override
public Desenho setFimY(int fimY) {
// TODO Auto-generated method stub
if(fimY != this.getFimY()){
int origem = this.getOrigemY();
float escala = (fimY - this.getOrigemY()) /(float)this.poligono.getBounds().height;
AffineTransform af = new AffineTransform();
af.setToTranslation(0, -this.getOrigemY());
modificaPoligono(af);
af.setToScale(1,escala);
modificaPoligono(af);
af.setToTranslation(0, origem);
modificaPoligono(af);
}
return this;
}
/* (non-Javadoc)
* @see br.ericware.desenhos.Desenho#setOrigemX(int)
*/
@Override
public Desenho setOrigemX(int origemX) {
// TODO Auto-generated method stub
if(origemX != this.getOrigemX()){
float escala = (this.getFimX() - origemX) /(float)this.poligono.getBounds().width;
AffineTransform af = new AffineTransform();
af.setToTranslation(-this.getOrigemX(),0);
modificaPoligono(af);
af.setToScale(escala,1);
modificaPoligono(af);
af.setToTranslation(origemX,0);
modificaPoligono(af);
}
return this;
}
/* (non-Javadoc)
* @see br.ericware.desenhos.Desenho#setOrigemY(int)
*/
@Override
public Desenho setOrigemY(int origemY) {
// TODO Auto-generated method stub
if(origemY != this.getOrigemY()){
float escala = (this.getFimY() - origemY) /(float)this.poligono.getBounds().height;
AffineTransform af = new AffineTransform();
af.setToTranslation(0,-this.getOrigemY());
modificaPoligono(af);
af.setToScale(1,escala);
modificaPoligono(af);
af.setToTranslation(0,origemY);
modificaPoligono(af);
}
return this;
}
/**
* Modifica o polígono conforme a matriz de tranformação fornecida
* @param af
*/
private void modificaPoligono(AffineTransform af) {
if(this.geraPoligono().npoints > 0){
List<Point2D> pontos = new ArrayList<Point2D>();
for(int i =0; i < this.geraPoligono().npoints;i++){
pontos.add(af.transform(new Point(this.geraPoligono().xpoints[i], this.geraPoligono().ypoints[i]),null));
}
this.geraPoligono().reset();
for (Point2D point : pontos) {
this.acrescentaExtremo((int)point.getX(), (int)point.getY());
}
}else{
for (Line2D linha : this.linhas) {
linha.getP1().setLocation(af.transform(linha.getP1(), null));
linha.getP2().setLocation(af.transform(linha.getP2(), null));
}
}
}
Onde polígono é do tipo Polygon mesmo e linhas é uma list do tipo Line2D, onde as extremidades dessas linhas formas as bordas dos polígono(isso não pode ser alterado facilmente).
Então, conseguem perceber algum erro ai? Qualquer coisa serve. Agradeço desde já.