Cześć wszystkim,
Mam kawałek kodu sprawdzający rozdzielczość oryginalnego image, jeśli jest mniejsza niż 300 powinien podnieść do 300 dpi co przy dalszej obróbce zapewnia przyzwoitą jakość.
var fs = Directory.GetCurrentDirectory() + "\\img\\" + filename + ".jpg";
Image img;
img = Image.FromFile(fs);
if(img.HorizontalResolution < 300 & img.VerticalResolution < 300)
{
using (Bitmap b = new Bitmap(img))
{
b.SetResolution(300.0F, 300.0F);
img = (Image)b;
MessageBox.Show(img.HorizontalResolution.ToString()); // << tu jest ok
}
}
MessageBox.Show(img.HorizontalResolution.ToString()); // << Tu już rzuca wyjątkiem
Dopóki nie będzie wykonane Dispose() na obiekcie b jest ok, po wyjściu z using praca na obiekcie img jest niemożliwa.
Jeśli wszystko wyrzucę z klauzury using i ręcznie nie wykonam metody Dispose() na obiekcie b wszystko jest ok.
I tu właśnie pytanie, dlaczego nie mogę zwolnić zasobów skoro wcześniej dokonałem rzutowania Bitmap na Image ?