Direct2D — рисование прямоугольников и кругов в больших изображениях и сохранение на диск

Моя задача состоит в том, чтобы нарисовать множество простых геометрических фигур, таких как прямоугольники и круги, в большие черно-белые изображения (размером около 4000x6000 пикселей) и сохранить результат как в битмап-файлы, так и в двоичный массив, представляющий каждый пиксель как 1, если нарисовано или 0 в противном случае. Я использовал GDI+ (=System.Drawing). Однако, поскольку это заняло слишком много времени, я начал присматриваться к Direct2D. Я быстро научился рисовать в окне Win32 и подумал, что вместо этого могу использовать это для рисования в растровом изображении.

Я научился загружать изображение и отображать его здесь: https://msdn.microsoft.com/de-de/library/windows/desktop/ee719658(v=vs.85).aspx Но мне не удалось найти информацию о том, как создать большой ID2D1Bitmap и визуализировать его.

Как я могу создать цель рендеринга (должна ли это быть ID2D1HwndRenderTarget?), связанную с таким недавно созданным (как?) большим растровым изображением, и нарисовать к нему прямоугольники и круги, а затем сохранить его в файл?

Большое спасибо за то, что указали мне правильное направление, Юрген


person juergen861    schedule 03.02.2017    source источник


Ответы (1)


Если бы мне пришлось это сделать, я бы накатил свой собственный код вместо того, чтобы использовать вызовы GDI или DirectX. Структура двоичного растрового изображения очень проста (упакованный массив битов), и после того, как вы реализовали функцию для установки одного пикселя и одного для рисования одного отрезка (горизонтальный отрезок линии), рисовать прямоугольники и круги становится легко.

Если вам не нравится упаковка битов, вы можете вместо этого работать с массивом байтов (один пиксель на байт) и в конце преобразовать все изображение.

Запись растрового изображения в файл также не составляет большого труда, если вы знаете об операциях ввода-вывода двоичных файлов (и вы найдете множество готовых функций в Интернете).


На самом деле, когда вы знаете особенности расположения данных растрового файла, вам вообще не нужна Windows.

person Yves Daoust    schedule 03.02.2017