Tworzę więc prosty program do przetwarzania obrazu z GUI, C#. Na przykład chcę zmienić kolory obrazu w modelu kolorów HSV, konwertując każdy piksel z RGB iz powrotem.Jak przetwarzać obraz piksel po pikselu za pomocą interfejsu WinAPI w SZYBKIM SPOSOBIE?
Mój program ładuje niektóre zdjęcia według wyboru użytkownika i wyświetla je w jednym z paneli formularza za pomocą kontekstu Grafika. Następnie użytkownik może zrobić coś z tym obrazem, przesuwając paski przewijania, klikając przyciski, wybierając jakiś obszar obrazu itp. Kiedy to zrobi, potrzebuję w czasie rzeczywistym zmienić cały obraz piksel po pikselu. Więc piszę coś takiego:
for (int x = 0; x < imageWidth; x++)
for (int y = 0; y < imageHeight; y++)
Color c = g.GetPixel(x, y);
c = some_process_color_function_depending_on_user_controls(c);
g.SetPixel(x, y)
I nawet jeśli pracuję z grafiką w pamięci (nie na ekranie), funkcje getPixel i SetPixel działa bardzo wolno (tak, jak mój program działa tak wolno, że profilowane go i wyjaśniłem, że te dwie funkcje spowalniają mój program co najwyżej). Nie mogę przetworzyć dużych zdjęć za kilka chwil, gdy użytkownik przesunie suwak lub zaznaczy pole wyboru.
Proszę pomóc! Co mogę zrobić, aby mój program był szybki? Nie zgadzam się używać innych bibliotek zewnętrznych do grafiki lub zmieniać języka programowania!
+1 za korzystanie profilera, nice! – asawyer