Нужно сравнить два изображения (.jpg), чуть позже, возможно, ещё и видео. написал функцию:
void unique(List<Photo> &list)
{
string subject_name, object_name;
size_t i = 0;
while (list.Get_Size())
{
subject_name = list[i].Get_data(LOCATION) + list[i].Get_data(NAME);
ifstream subject(subject_name, ios::binary | ios::ate);
size_t subject_size = subject.tellg();
subject.seekg(0, ios::beg);
char *subject_buf = new char[subject_size];
subject.read(subject_buf, subject_size);
subject.close();
for (size_t j = i + 1; j < list.Get_Size(); j++)
{
object_name = list[j].Get_data(LOCATION) + list[j].Get_data(NAME);
ifstream object(subject_name, ios::binary | ios::ate);
size_t object_size = object.tellg();
if (subject_size != object_size)
{
object.close();
break;
}
object.seekg(0, ios::beg);
char *object_buf = new char[object_size];
object.read(object_buf, object_size);
object.close();
for (size_t k = 0; k < subject_size; k++)
{
if (subject_buf[k] != object_buf[k])
break;
if (k == subject_size)
{
list.removeAt(j);
delete[] object_buf;
delete[] subject_buf;
unique(list);
return;
}
}
delete[] object_buf;
}
i++;
delete[] subject_buf;
if (i > list.Get_Size() - 1)
return;
}
}
Сравниваю файлы побитого, если ничего не напутал. Файлы открываю в бинарном режиме и в режиме чтения.
Первым делом проверяю, не равны ли размеры. Затем, поочерёдно сравниваю в цикле for
каждый символ: если встречаются разные, выхожу из текущего цикла и сравниваю следующий файл, если все были одинаковые и дошли до последнего - делаю вывод, что это копия фотографии и, следовательно, удаляю.
как только происходит удаление, рекурсивно вхожу в эту же функцию.
Сам я ошибки в алгоритме не вижу, может, знатоки подскажут?
P.S. Не уверен, что нужны рекурсия и такое сравнение посимвольное, но добавил их в отчаянных попытках заставить э_т_о
работать.
P.P.S. Есть предположение, что при таком подходе, учитывается имя файла, а они, конечно, разные. Если так, подскажите как просто сравнить фотографии.
P.P.P.S. Про сравнения фоток на форуме читал, но мне не надо выделять объекты, сравнивать цвет штор, количество кресел и наличие инопланетян. Я просто хочу узнать являются ли два файла копией. Будь там даже один иной пиксель - для меня они уже разные.
Заранее спасибо)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется файл, в нём написаны словаС клавиатуры вводится слово с неповторяющимися буквами
Есть файл, в нём написаны числаНужно найти и вывести на экран самое маленькое число, которое делится на все числа из файла, тобишь наименьшее...
Если открываю готовый проект - не работают стандартные библиотеки