Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нахождения различий на картинки???? 
V
    Опции темы
unkis
  Дата 15.11.2006, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Ребята есть две картинки, почти одинаковые, надо получить результирующую картинку, которая будет содержать эти отличия.

Код


BufferedImage a = ImageIo(new File("a.png"));
BufferedImage b = ImageIo(new File("b.png"));



надо зделать что-то типо такого
BufferedImage result = a xor b;

как это можно реализовать?


заранее благодарен





--------------------
www.unkis.com
PM MAIL WWW   Вверх
unkis
Дата 15.11.2006, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Ребята я пытаюсь ето сделать вот так:

Код

package screenshotmaker;

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 *
 * @author unkis
 */
public class Main {
    
    /** Creates a new instance of Main */
    public Main() throws Exception {
        BufferedImage a = ImageIO.read(new File("proba1.png"));
        BufferedImage b = ImageIO.read(new File("proba2.png"));
        ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
        ImageIO.write(a,"PNG",baos1);
        
        byte[] aa = baos1.toByteArray();
        
        
        ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
        ImageIO.write(b,"PNG",baos2);
        byte[] bb = baos2.toByteArray();
        
        byte[] cc = xorArray(aa,bb);
        System.out.println("cc size = " +cc.length);
        
        ByteArrayInputStream baos3 = new ByteArrayInputStream(cc);
        BufferedImage result = ImageIO.read(baos3);
        
        ImageIO.write(result,"PNG",new File("result.png"));
        
        
    }
    
    public byte [] xorArray(byte [] a, byte [] b) throws Exception {
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension screenSize = toolkit.getScreenSize();
        if(b.length<a.length) throw new IllegalArgumentException("length of byte [] b must be >= byte [] a");
        byte [] c = new byte[1200*802];
        for(int i =0;i< a.length;i++) {
            c[i] = (byte)(a[i] - b[i]);
        }
        return c;
    }
    

    public static void main(String[] args) throws AWTException, InterruptedException, IOException, Exception {
        new Main();
                
    }
    
}



но видает такую ошибку
Код

cc size = 962400
Exception in thread "main" java.lang.IllegalArgumentException: im == null!
        at javax.imageio.ImageIO.write(ImageIO.java:1429)
        at javax.imageio.ImageIO.write(ImageIO.java:1488)
        at screenshotmaker.Main.<init>(Main.java:54)
        at screenshotmaker.Main.main(Main.java:78)
Java Result: 1
BUILD SUCCESSFUL (total time: 5 seconds)



Насколько я понимаю мой
Код

BufferedImage result = ImageIO.read(baos3);


равен  null.
я толко не могу понять почему?



--------------------
www.unkis.com
PM MAIL WWW   Вверх
powerOn
Дата 15.11.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Тут вроде как пример есть... 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
s8e8r8g8e
Дата 16.11.2006, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 12.5.2006

Репутация: 1
Всего: 1



ради интереса, а что значит картинка содержащия различия, это значит что если один пиксель оличается, то на результируещей должен быть этот один пиксель из 2й картинки, а всё остальное например белое или прозрачное?
PM MAIL   Вверх
unkis
Дата 16.11.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Цитата(s8e8r8g8e @  15.11.2006,  22:44 Найти цитируемый пост)
ради интереса, а что значит картинка содержащия различия, это значит что если один пиксель оличается, то на результируещей должен быть этот один пиксель из 2й картинки, а всё остальное например белое или прозрачное? 


Совершенно верно, при этом хотелось бы, чтобы результирующая картинка была не бинарной(чёрно-белой), а всё таки цветной.



Цитата(powerOn @  15.11.2006,  18:44 Найти цитируемый пост)
Тут вроде как пример есть...  


Спасибо за пример, очень интересно.

Но мне всё таки интересно почему мой пример не работает?

Заранее благодарен.


--------------------
www.unkis.com
PM MAIL WWW   Вверх
NotGonnaGetUs
Дата 16.11.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 25.2.2005
Где: Москва

Репутация: 4
Всего: 12



Цитата(unkis @  16.11.2006,  12:22 Найти цитируемый пост)
о мне всё таки интересно почему мой пример не работает?

Потому что в PNG формат сложный и после операции xorArray в baos3 оказвается никому не понятная последовательность байт.
Т.к. её нельзя распознать возвращается null.
PM MAIL   Вверх
unkis
Дата 16.11.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Спасибо, а какой лёгкий, gif, jpg,bmp?

хотя я не понимаю, ведь когда я считываю и записываю в BufferedImage, то моя картинка приводится к стандартному формату, и только после того как я вызываю этот метод
Код

// result - мой BufferedImage
ImageIO.write(result,"PNG",new File("result.png"));

она конвертируется в PNG, GIF, JPG, итак далее.

Я прав или нет?


Заранее благодарен.


--------------------
www.unkis.com
PM MAIL WWW   Вверх
LSD
Дата 16.11.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(unkis @  16.11.2006,  16:28 Найти цитируемый пост)
Я прав или нет?

Нет.
Алгоритм такой: считываешь оба файла в BufferedImage, создаешь еще один BufferedImage такого же размера, затем делаешь свой XOR (resultImage.setRGB(x, y, image1.getRGB(x, y) ^ image2.getRGB(x, y));), затем записываешь получившийся resultImage в файл.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
unkis
Дата 16.11.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



спасибо получилось


--------------------
www.unkis.com
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2910 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.