Witam, mam następujący problem:
wczytuję obraz z dysku, a następnie muszę stworzyć kilka jego wersji różniących się rozmiarem i każdy taki obraz pociąć i zapisać na dysku. Ponieważ obrazy mogą być baaardzo duże to trochę trwa, więc chcę każde (resize, cięcie i zapis na dysk) zrobić osobno dla każdej wersji rozmiarowej.
Jednak tutaj pojawia się problem, bo gdy uruchamiam kilka wątków i każdemu przekazuję ten sam, oryginalny obraz na wejściu procedury, to wywala błąd że obiekt (obraz) jest już obecnie używany.
Czy mógłby ktoś mi pomóc jak to można rozwiązać?
Zaznaczam tylko że procedura zmieniająca rozmiar nie modyfikuje oryginalnego a tylko tworzy nowy na jego podstawie, oto ta procedura:
public static Bitmap ResizeImage(Image img, double percent)
{
if (img == null)
return null;
if (percent <= 0)
return null;
percent = percent / 100.0;
Bitmap bmp = new Bitmap(img);
int srcWidth = bmp.Width;
int srcHeight = bmp.Height;
int destWidth = (int)(srcWidth * percent);
int destHeight = (int)(srcHeight * percent);
if (destWidth <= 0 || destHeight <= 0)
return null;
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage(b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(bmp, 0, 0, destWidth, destHeight);
g.Dispose();
return b;
}//ResizeImage()
Dodam jeszcze że obrazy mogą być naprawdę duże, np. 5000x4000px