Пример кода для изменения размера изображения с использованием DirectX

StackOverflow https://stackoverflow.com/questions/173258

  •  05-07-2019
  •  | 
  •  

Вопрос

Я знаю, что это возможно, и намного быстрее, чем использование GDI +. Однако я не нашел хорошего примера использования DirectX для изменения размера изображения и сохранения его на диск. Я реализовал это снова и снова в GDI +, это не сложно. Однако GDI + не использует аппаратное ускорение, и я надеялся повысить производительность, подключившись к видеокарте.

Это было полезно?

Решение

Вам действительно нужно использовать DirectX? GDI + хорошо справляется с изменением размеров изображений. В DirectX вам не нужно изменять размер изображений, так как вы, скорее всего, будете отображать их в виде текстур. Поскольку текстуры могут применяться только к трехмерному объекту (треугольники / многоугольники / сетка), размер трехмерного объекта и порта просмотра определяет фактический отображаемый размер изображения. Если вам нужно масштабировать текстуру внутри 3d-объекта, просто воспроизведите текстуру координат или матрицы.

Чтобы манипулировать текстурой, вы можете использовать альфа-смешение, маскирование и все виды техники манипулирования текстурой, если это то, что вы ищете. Чтобы манипулировать отдельным пикселем, таким как GDI +, я все еще думаю, что GDI + - это способ сделать. DirectX никогда не исправлял работу с изображениями.

Другие советы

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

Это легко. Основные примеры текстурирования DirectX, поставляемые с SDK, могут быть настроены именно для этого.

Тем не менее, это медленно . Не сам рендеринг, а передача данных пикселей с экрана в буфер памяти.

Имхо, было бы намного проще и быстрее просто написать небольшой код, который изменяет размеры изображения, используя билинейное масштабирование из одного буфера в другой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top