Я пытаюсь воссоздать очень простые функции GDI +, такие как масштабирование и поворот изображения. Причина в том, что некоторые функции GDI не могут выполняться на нескольких потоках (я нашел работу с использованием процессов, но не хотел этого делать), и обработка тысяч изображений на одном потоке не была почти разрезанием. Также мои изображения оттенки серого, поэтому пользовательская функция должна будет беспокоиться только о одном значении вместо 4.Как функционирует GDI + так быстро?
Независимо от того, какую функцию я пытаюсь воссоздать, даже если она очень оптимизирована, она всегда в несколько раз медленнее, несмотря на то, что он значительно упрощен по сравнению с тем, что делает GDI (я работаю на 1D массиве байтов, по одному байту на пиксель)
Я подумал, что, возможно, способ, которым я вращал каждую точку, мог быть разницей, поэтому я взял ее полностью и в основном имеет функцию, проходящую через каждый пиксель, и просто устанавливает ее на то, что она уже есть, и это было только приблизительно связано со скоростью GDI, хотя GDI делал фактическое вращение и менял 4 разных значения на пиксель.
Что делает это возможным? Есть ли способ сопоставить его с помощью вашей собственной функции?
Как вы проходите через каждый пиксель? –
[Интерфейс графического устройства] (https://en.wikipedia.org/wiki/Graphics_Device_Interface) должен быть быстрым. Он написан на родном C/C++ и может даже использовать аппаратную функцию графического адаптера для рисования, например. линия. Это будет быстрее, чем ваша итерация на пиксель в C#. Вы можете попытаться достичь почти такой же производительности, если узнаете, как использовать эти функции (например, управляемый DirectX). – Sinatr
Это всего лишь цикл for, который проходит через массив байтов. каждый байт в массиве представляет интенсивность в пикселе. Я думал, что GDI вообще не касается GPU. Если да, то это определенно объяснит это, но я прочитал, что это не так. – Frobot