Sto tentando di ricreare funzioni GDI + molto semplici, come ridimensionare e ruotare un'immagine. Il motivo è che alcune funzioni GDI non possono essere eseguite su più thread (ho trovato un modo di aggirare l'utilizzo dei processi ma non volevo entrare in quello), e l'elaborazione di migliaia di immagini su un thread non stava quasi tagliandola. Anche le mie immagini sono in scala di grigi, quindi una funzione personalizzata dovrebbe preoccuparsi solo di un valore invece di 4.In che modo GDI + funziona così velocemente?
Indipendentemente dal tipo di funzione che cerco di ricreare, anche quando altamente ottimizzato, è sempre SEMPRE più lento, nonostante sia notevolmente semplificato rispetto a ciò che GDI sta facendo (sto operando su un array 1D di byte, un byte per pixel)
Ho pensato che forse il modo in cui ruotavo ogni punto poteva essere la differenza, quindi l'ho tolto completamente, e fondamentalmente aveva una funzione che attraversa ogni pixel e la imposta su ciò che è già, e che era solo approssimativamente legata alla velocità di GDI, anche se GDI stava facendo una rotazione effettiva e cambiando 4 valori diversi per pixel.
Che cosa rende possibile questo? C'è un modo per abbinarlo usando la tua funzione?
Come stai passando attraverso ogni pixel? –
[Graphics Device Interface] (https://en.wikipedia.org/wiki/Graphics_Device_Interface) dovrebbe essere veloce. È scritto in C/C++ nativo e potrebbe anche utilizzare la funzione hardware dell'adattatore grafico per disegnare per es. linea. Sarebbe molto più veloce della tua iterazione per pixel in C#. Puoi provare a ottenere le stesse prestazioni se impari a utilizzare anche queste funzioni (ad esempio DirectX gestito). – Sinatr
È solo un ciclo for che attraversa una serie di byte. ogni byte nella matrice rappresenta l'intensità di un pixel. Ho pensato che GDI non tocchi affatto la GPU. Se lo fa, allora lo spiegherebbe sicuramente, ma ho letto che non è così. – Frobot