Jak resit kdyz pri operaci s obrazkem vznikne chyba ArgumentException – Value does not fall within the expected range.

Dnes jsem se pokusil znovu pouzit rozdelovani obrazku ve svem programu ShrinkerImages. Pouze s jednim obrazkem – totiz fotkou z me Lumie 435. Nicmene poprve jsem se realne setkal s obrazkem ktery mel nizsi DPI nez klasickych 96. Pokud ma obrazek jine DPI nez 96(vyzkousene to mam pouze s nizsim), tak treba metoda BitmapImage vraci napriklad velikost tohoto obrazku takto: Skutecna sirka v px * 96 / DpiX obrazku. Analogicky s vyskou. Mel jsem kod ktery obrazek orezaval, ted uz vim ze je dobre zkontrolovat DPI a pripadne nastavit jinou velikost. Nebude to mit vliv napriklad na velikost v px vysledneho obrazku.

//-bi je BitmapImage obrazek ke vyrezu, point je bod od ktereho se vyrezava, size je velikost ktera se vyrezava
if (bi.DpiX != 96)
{
size.Width /= 96d;
size.Width *= bi.DpiX;
point.X /= 96d;
point.X *= bi.DpiX;
}
if (bi.DpiY != 96)
{
size.Height /= 96d;
size.Height *= bi.DpiY;
point.Y /= 96d;
point.Y *= bi.DpiY;
}
//-Samotna operace vyrezu
return BitmapFrame.Create( new CroppedBitmap(bi, new Int32Rect((int)point.X, (int)point.Y, (int)size.Width, (int)size.Height)));

Leave a Reply