Я пишу приложение с DirectX11 Direct2D, частью которого является загрузка и рисование последовательностей файлов изображений в реальном времени (видеоопределение). Размер этих файлов изображений различается (100x100 ~ 2000x2000 x RGBA). Будут оптимизация, предварительная загрузка (предварительная буферизация) логики, но я хочу понять, что это за правильная/лучшая практика/метод для этого.Загрузка изображений с диска и их рисование в ресурс Direct2D
Вот текущий рабочий процесс, я следую:
- Загрузить файл с WIC,
- Преобразовать в PBGRA Картинку (по желанию),
- Блокирование WIC пикселей,
- Создание D2D1Bitmap с помощью этого пиксельные данные
Однако проблема в том, что это медленно. Это узкие места в точке №4 - передача данных пикселя в VRAM. Поэтому я ищу более быстрый способ (т. Е. Самый быстрый).
Итак, есть ли способ загрузить изображение в виде текстуры или иным способом непосредственно в качестве ресурса DirectX, чтобы я мог минимизировать время для всего процесса/итерации? И в конечном итоге избежать использования компонента WIC?
Заранее спасибо С наилучшими пожеланиями
На шаге 4 вы используете 'CreateBitmapFromWicBitmap' ([MSDN здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd371797%28v=vs.85%29.aspx))? Если нет, вы должны попробовать, если это так, то я не понимаю, зачем вам нужен шаг 3. –
Извините, я забыл упомянуть - я использую ID2D1DeviceContext :: CreateBitmap() ([msdn] (http://msdn.microsoft .com/EN-US/библиотека/окна/настольные/jj841129 (v = vs.85) .aspx)). Я также пробовал метод ID2D1DeviceContext :: CreateBitmapFromWicBitmap, они кажутся похожими в perforamce. Да, тогда мне не нужно блокировать WIC pixeldata. Во всяком случае, в моем случае (используя оба метода) для загрузки растрового изображения HD (1920 × 1080) в D2D1Bitmap требуется до 30 мс. Это слишком медленно для моих нужд. –
Итак, предполагая RGBA, это около 260 мегабайт в секунду, которую вы достигаете. На что способен ваш аппарат? –