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 :)