Я, вероятно, думаю, что все это неправильно, поэтому позвольте мне начать с формулировки цели: я хочу сравнить два изображения, XOR их вместе, а затем сохранить (не отображать) результат в виде файла. На самом деле, я хочу затем усреднить все битовые значения, чтобы получить процентное соответствие, но эта часть не сложная.
Так BitBlt (помните BitBlt?) имеет ROP, называемый SRCINVERT, который делает именно это. И очень быстро. Работает угощение. Но … он хочет источник и назначение DC (Контекст устройства) работать с … можно SelectObject битмап в эти DC, но вы должны иметь DC.
Создание DC легко с CreateCompatibleDC (0); или даже CreateDC (L «DISPLAY», NULL, NULL, NULL); но … они основаны на глубине пикселей, размере и т. д. текущего аппаратного дисплея. {EDIT: нет, CreateCompatibleDC (0); получает все из выбранного растрового изображения, я просто не использовал его.} И меня это не волнует, я хочу работать с глубиной пикселей и т. Д. Файлов, из которых я загружаю растровые изображения. На самом деле, это программа командной строки; у него никогда не будет окна. РЕДАКТИРОВАТЬ: Но поскольку DC предназначен для реального экрана, при использовании CreateDC (L «DISPLAY», NULL, NULL, NULL) я вижу изображение на дисплее (перезаписывая рабочий стол), прежде чем оно сохраняется в файл.
Я застрял? Нужно ли искать другую графическую библиотеку для выполнения функции XOR? Или есть способ использовать BitBlt? В более общем смысле, есть ли способ сделать вещи типа GDI или GDIPlus с DC, которые не существуют в текущей системе? Разве это не было бы действительно полезным для программ, которые обрабатывают файлы изображений без необходимости отображать результат?
Как только вы выберете растровое изображение в контексте памяти, его битовая глубина / размер пикселя будут приняты теми из растрового изображения.
неважно … глупый мальчик … я использовал CreateDC (L «DISPLAY», NULL, NULL, NULL); сделать целевой DC и когда я попробовал CreateCompatibleDC (0); Должно быть, я только изменил источник DC … Упс. CreateCompatibleDC (0); работает удовольствие.