Форум программистов, компьютерный форум CyberForum.ru

Сравнение 2 картинок - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Vlad1slav
21 / 21 / 5
Регистрация: 16.09.2009
Сообщений: 111
22.02.2012, 23:23     Сравнение 2 картинок #1
Есть 2 картинки, одного размера и почти одинаковые, за исключением некоторых пикселей.
Нужно создать картинки с несовпадающими(совпадающими) пикселями исходных картинок.

Где-то встречал пример с использованием растровых операций BitBlt.
Сейчас бы хотел повторить такое, но мне для этого мне нужно HDC.

Если я картинку получаю "скриншотом" с экрана, никаких проблемм нет:
C++
1
2
3
4
5
6
7
    HDC hdc=GetDC(hwnd);
 
    hBmp=CreateCompatibleBitmap(hdc, cx, cy);
    hMemDC=CreateCompatibleDC(hdc);
    SelectObject(hMemDC, hBmp);
 
    BitBlt(hMemDC, 0, 0, cx, cy, hdc, x, y,  SRCCOPY);
Но если считываю с файла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    FILE* f;
    LPBITMAPFILEHEADER lpbFileh;
    int infosize;
 
    f=_wfopen(fname, L"rb");
    lpbFileh=new BITMAPFILEHEADER;
    fread(lpbFileh, sizeof(BITMAPFILEHEADER), 1, f);
    infosize=lpbFileh->bfOffBits-sizeof(BITMAPFILEHEADER);
    lpBmpInfo=(LPBITMAPINFO)malloc(infosize);
    fread(lpBmpInfo, infosize, 1, f);
    lpBuffer=malloc(lpBmpInfo->bmiHeader.biSizeImage);
    fread(lpBuffer, lpBmpInfo->bmiHeader.biSizeImage, 1, f);
    fclose(f);
То как быть?

Попробывал след. код:
C++
1
2
3
4
    hMemDC=CreateCompatibleDC(NULL);
    hBmp=CreateCompatibleBitmap(NULL, lpBmpInfo->bmiHeader.biWidth, lpBmpInfo->bmiHeader.biHeight);
    SetDIBits(hMemDC, hBmp, 0, lpBmpInfo->bmiHeader.biHeight, lpBuffer, lpBmpInfo, DIB_RGB_COLORS);
    SelectObject(hMemDC, hBmp);
но hMemDC пустое...

В общем как при считывании картинки с диска, получить HDC, для функции BitBlt(...)

Добавлено через 56 минут
Сам задал вопрос-сам на него и ответил:
Достаточно передать HDC ненулевой, а HDC рабочего стола)

C++
1
2
3
4
HDC hdc=GetDC(NULL);
        hMemDC=CreateCompatibleDC(NULL);
        hBmp=CreateCompatibleBitmap(NULL, lpBmpInfo->bmiHeader.biWidth, lpBmpInfo->bmiHeader.biHeight);
        ReleaseDC(NULL, hdc);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2012, 23:23     Сравнение 2 картинок
Посмотрите здесь:

C++ Массив картинок
Библиотеки C++ функций для преобразования файлов- картинок C++
фрактальный алгоритм сжатия картинок C++
C++ Сравнение.
Создание 3d объекта из набора картинок C++
C++ Сравнение C++ с С#
хранение картинок C++
Сохранить одну или несколько картинок в PDF C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 20:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru