У меня есть существующий буфер, заполненный битовыми данными (DIB), то есть ширина x высота x 4 байта (RGBA). Я хочу сделать это растровое изображение на экране, но, глядя на функции CreateBitmap .../CreateDIB ..., они, похоже, не выполняют то, что я ищу. Я не хочу копировать память, я хочу сохранить доступ к ней, поэтому я могу продолжать писать ее в следующем кадре (без ущерба для копирования данных). Существует ли такой метод, или мне нужно создать новое растровое изображение и вызвать SetDIBits на нем?Создание HBITMAP из существующего буфера
ответ
Вы не можете написать DIB непосредственно в контекст устройства - вам нужно будет создать растровое изображение и скопировать пиксели. Раздражаю, я знаю!
Похоже, this question имеет сжатый способ сделать это в принятом ответе.
Да, я видел этот вопрос, но, к сожалению, принятый ответ использует GDI +, который я не могу использовать. –
Это позор. Ну, это «SetDIBits» и возможное преобразование пикселей для вас! Надеюсь, все будет хорошо. – noelicus
Если вам нужен простой код, вы можете использовать структуру BITMAP и назначить его bmBits для указания фактических данных изображения (RGBA 8 бит).
Затем вы можете использовать метод GDI
HBITMAP CreateBitmapIndirect(const BITMAP *pbm);
создать HBITMAP для отображения изображения на экране.
Но на самом деле я думаю, что система все еще выполняет копирование при создании HBITMAP, поэтому после возврата CreateBitmapIndirect вы можете безопасно освобождать свои данные изображения.
Но по крайней мере вам нужно только создать буфер один раз и использовать его несколько раз, пока размер изображения не изменится.
Я использую этот метод для отображения необработанного видео с камеры RED.
- 1. Создание HBITMAP из буфера памяти
- 2. Создайте HBITMAP из буфера памяти jpeg?
- 3. C++ HBITMAP из двоичных данных
- 4. Создание обработчика событий из существующего
- 5. Создание объекта из существующего объекта
- 6. Создание растрового изображения (.NET) от HBITMAP
- 7. C++ Получение RGB из hBitmap
- 8. Преобразование из HBITMAP в IWICBitmap
- 9. C# эквивалент javascript TypedArray, созданный из буфера существующего массива?
- 10. Создание нового файла из существующего файла
- 11. Создание приложения angularjs из существующего кода javascript
- 12. Создание нового перечисления из существующего перечисления
- 13. Создание нового проекта Xcode из существующего проекта
- 14. Создание меньшего списка из существующего списка
- 15. Создание нескольких массивов из существующего массива
- 16. Создание новых массивов из существующего массива массивов
- 17. Создание нового списка из существующего списка
- 18. Создание CakePHP REST api из существующего проекта
- 19. Создание XML из существующего XSD-файла (комплекса)
- 20. Создание CocoaPod из существующего проекта Xcode
- 21. Создание документа проекта из существующего кода Java
- 22. C# - Создание списка из существующего словаря
- 23. Создание Java.util.List из существующего .txt-файла 'FIXED'
- 24. Создание классов .Net из существующего экземпляра MongoDB
- 25. Python Создание нового списка из существующего списка
- 26. Создание Java-Zip-архива из существующего OutputStream
- 27. Создание словаря в C# из существующего массива
- 28. Создание миниатюры меньшего размера из существующего изображения
- 29. Создание новых проектов из существующего «шаблонного» репо
- 30. создание службы Windows из существующего веб-приложения
У вас есть необработанный буфер буфера и хотите нарисовать его на экране? –