Программирование Windows: интерфейс ID2D1Bitmap - получение растровых данных - PullRequest
2 голосов
/ 03 мая 2010

Я пишу свою собственную библиотеку функций для доступа к некоторым новым библиотекам Direct2D для Windows. В частности, я работал над интерфейсом ID2D1Bitmap. Я хотел написать функцию, которая будет возвращать указатель на начало данных растрового изображения (для редактирования отдельных пикселей, или пользовательского кодирования, или чего-либо еще, что я мог бы пожелать в будущем). К сожалению ... проблема впереди ...

Не получается найти способ получить доступ к необработанным пиксельным данным из интерфейса ID2D1Bitmap.

У кого-нибудь есть идеи, как получить к этому доступ? Один из моих друзей предложил нарисовать растровое изображение на поверхности и извлечь оттуда растровые данные. Я не знаю, сработает ли это. Это определенно кажется неэффективным, и я не знаю, какую поверхность использовать.

Любая помощь приветствуется. (в частности, c ++, но я предполагаю, что код не будет слишком отличаться между языками)

(я знаю, что могу просто прочитать данные непосредственно из файла, но я использую декодеры WIC, что означает, что они могут быть в любом количестве неразборчивых форматов)

Ответы [ 2 ]

1 голос
/ 10 января 2014

Как правило, вы не можете получить доступ к ID2D1Bitmap данным. Думайте о том, как только данные GPU. Однако с некоторыми ограничениями вы можете получить доступ к данным через другие интерфейсы в зависимости от того, как было создано ваше растровое изображение.

Поскольку ваше растровое изображение поддерживается IWICBitmap, вы используете Lock . [ (более крупный пример: как изменить пиксели источника растрового изображения) ]

Если растровое изображение поддерживается ID3D11Texture2D, вы бы использовали Map .

В случае IDXGISurface вы можете использовать GetDC .

0 голосов
/ 17 августа 2010

Поскольку вы используете декодер WIC, вы сможете использовать IWICBitmap :: Lock напрямую для получения растровых данных.

...