Поворот изображения приводит к повреждению - PullRequest
0 голосов
/ 06 мая 2011

Я пытаюсь повернуть изображение влево и вправо на 90 градусов.

По какой-то причине выходные данные этого процесса приводят к повреждению.

Вот мой код:
(это классно, но не нужно много воображения, чтобы притвориться своим Java)

void rotate(File file){
    def image = ImageIO.read(file);
    double theta  = Math.PI / 2;
    def w = image.width / 2;
    def h = image.height / 2;

    def transform = new AffineTransform();
    transform.rotate(theta, h, w);
    def op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
    image = op.filter(image, null);

    def name = file.getName();
    def type = name.substring(name.lastIndexOf(".") + 1, name.length());
    ImageIO.write(image,type,file);
}

оригинал: enter image description here

повернутоenter image description here

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Для метода filter() требуются src и dst BufferedImage, которые должны отличаться.

Image image = null;
try {
    image = ImageIO.read(new File("gZtC3.jpg"));
} catch (IOException ex) {
    ex.printStackTrace(System.err);
}
double theta = Math.PI / 2;
int w = image.getWidth(null);
int h = image.getHeight(null);
AffineTransform at = AffineTransform.getRotateInstance(theta, w / 2, h / 2);
BufferedImage src = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = src.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
BufferedImage dst = op.filter(src, null);
this.add(new JLabel(new ImageIcon(dst), JLabel.CENTER));
1 голос
/ 06 мая 2011

Если из-за искажения вы имеете в виду изменение цвета, выньте фильтр.Это дает вам негативное представление, если я правильно понимаю синтаксис.

Всякий раз, когда я использую преобразования, я отключаю фильтры и делаю их вручную.Это занимает много времени, но они всегда оказываются более полезными.Просто предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...