Operacje 2D na bitmapie

0

Witam,

Piszę program który będzie operował na obrazkach na poziomie ich pikseli. Postanowiłem zrobić to w następujący sposób:

Umieściłem 2 PictureBoxy: pierwszy do wczytania obrazka (PicBox) a drugi do wyświetlenia zmodyfikowanego obrazka (AfterPic).

Wczytuję z dysku obrazek za pomocą FileDialoga, wyświetlam na pierwszym PictreBoxie i umieszczam go w zmiennej typu Bitmap o nazwie 'zrodlo'. Następnie tworzę zmienną bitmapową o nazwie 'wynik' i do niej piksel po pikselu przepisuje dane ze zmiennej 'zrodlo' (po modyfikacjach koloru każdego piksela). Ogólnie wszystko sie dzieje po wciśnięciu przycisku, wklejam kod:

private void button2_Click(object sender, EventArgs e)
        {
            Bitmap zrodlo = (Bitmap)PicBox.Image;
            int width = zrodlo.Width;
            int height = zrodlo.Height;
            Bitmap wynik = new Bitmap(width, height);
            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    Color col;
                    col = zrodlo.GetPixel(i, j);
                    int R = 255 - col.R;
                    int G = 255 - col.G;
                    int B = 255 - col.B;
                    if (R > 255) R = 255;
                    if (G > 255) G = 255;
                    if (B > 255) B = 255;
                    wynik.SetPixel(i, j, Color.FromArgb(R, G, B));
                }
            }
            AfterPic.Image = wynik;
        }

PROBLEM:
Rzecz w tym że program chodzi zaj%#%ie wolno. Cała ta operacja potrafi trwać nawet kilkadziesiąt sekund podczas gdy Photoshop to samo (negatyw) robi w niecałą sekundę. Ja rozumiem że Photoshopa robią spece ale bez przesady :/ To bardzo proste przekształcenie...

Proszę wskażcie mi błędy lub cokolwiek żeby działało szybciej :)

0

Zobacz: Windows Presentation Foundation (WPF w .NET 3.x), to rozwiąże Twoje problemy.

0

Może jakieś prostsze rozwiązanie? W międzyczasie spróbuję użyć tego co mi napisałeś ale wolałbym coś co nie wymaga instalacji .NET 3.0 Bo nie każdy to ma zainstalowane...

Ale dziękuję za pierwszą odpowiedź (mam nadzieję że nie ostatnią) ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1