Преобразование 16 bpp в 32 bpp - PullRequest
       24

Преобразование 16 bpp в 32 bpp

1 голос
/ 08 декабря 2010

У нас есть библиотека кодировщика, которая принимает данные 32 бит / с. У нас есть библиотека снимков экрана, которая также должна поддерживать 16 бит / с. Я хотел бы преобразовать необработанные данные 16 бит на пиксель в 32 бит на секунду, когда мне нужно передать новые снимки экрана в кодировщик. Как это можно сделать эффективно и есть ли другие альтернативы?

Я не хочу менять библиотеку кодировщика, потому что это потребует также изменений перед кодировщиком.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 декабря 2010

Вы можете загрузить исходное растровое изображение в HBITMAP, создать целевое растровое изображение с желаемым форматом пикселя и затем нарисовать источник в месте назначения.Это был бы самый простой способ сделать это.

Если вы хотите работать непосредственно с битами, это было бы возможно, но проще позволить системе беспокоиться об этом за вас.Вероятно, быстрее, когда система делает это, потому что она будет хорошо оптимизирована.

1 голос
/ 08 декабря 2010

Чтобы уточнить другие ответы: вам нужно использовать CreateDIBSection для создания растровых изображений в интересующих вас форматах: 16bpp и 32bpp.

Удобной функцией этой функции является то, что она возвращает указатель на буфер памяти с данными пикселей, что позволяет легко инициализировать растровое изображение из одного источника и извлекать данные пикселей для передачи в библиотеку кодировщика.

Исходное растровое изображение не обязательно должно быть DIBSection, это может быть любой тип HBITMAP (если он совместим с HDC, в который вы пытаетесь его выбрать - но библиотека снимков экрана будет давать вам совместим с DC HBITMAP, если он вообще дает вам HBITMAP)

Затем можно использовать BitBlt, чтобы заставить драйвер устройства выполнить преобразование формата.

1 голос
/ 08 декабря 2010

Использовать BitBlt:

"Если форматы цветов контекста исходного устройства и устройства назначения не совпадают, функция BitBlt преобразует формат исходного цвета в соответствии с форматом назначения."

http://msdn.microsoft.com/en-us/library/dd183370%28v=VS.85%29.aspx

...