Пример кода для изменения размера изображения с использованием DirectX
-
05-07-2019 - |
Вопрос
Я знаю, что это возможно, и намного быстрее, чем использование GDI +. Однако я не нашел хорошего примера использования DirectX для изменения размера изображения и сохранения его на диск. Я реализовал это снова и снова в GDI +, это не сложно. Однако GDI + не использует аппаратное ускорение, и я надеялся повысить производительность, подключившись к видеокарте.
Решение
Вам действительно нужно использовать DirectX? GDI + хорошо справляется с изменением размеров изображений. В DirectX вам не нужно изменять размер изображений, так как вы, скорее всего, будете отображать их в виде текстур. Поскольку текстуры могут применяться только к трехмерному объекту (треугольники / многоугольники / сетка), размер трехмерного объекта и порта просмотра определяет фактический отображаемый размер изображения. Если вам нужно масштабировать текстуру внутри 3d-объекта, просто воспроизведите текстуру координат или матрицы. Р>
Чтобы манипулировать текстурой, вы можете использовать альфа-смешение, маскирование и все виды техники манипулирования текстурой, если это то, что вы ищете. Чтобы манипулировать отдельным пикселем, таким как GDI +, я все еще думаю, что GDI + - это способ сделать. DirectX никогда не исправлял работу с изображениями.
Другие советы
Вы можете загрузить изображение как текстуру, нанести на карту текстуры на квад и нарисовать этот квад на любом размере на экране. Это сделает масштабирование. После этого вы можете получить пиксельные данные с экрана, сохранить их в файле или обработать дальше. Р>
Это легко. Основные примеры текстурирования DirectX, поставляемые с SDK, могут быть настроены именно для этого.
Тем не менее, это медленно . Не сам рендеринг, а передача данных пикселей с экрана в буфер памяти. Р>
Имхо, было бы намного проще и быстрее просто написать небольшой код, который изменяет размеры изображения, используя билинейное масштабирование из одного буфера в другой.