Jak řešit když při operaci s obrázkem vznikne chyba ArgumentException – Value does not fall within the expected range.

Dnes jsem se pokusil znovu použít rozdělování obrázků ve svém programu ShrinkerImages. Pouze s jedním obrázkem – totiž fotkou z mé Lumie 435. Nicméně poprvé jsem se reálně setkal s obrázkem který měl nižší DPI než klasických 96. Pokud má obrázek jiné DPI než 96 (vyzkoušené to mám pouze s nižším), tak třeba metoda BitmapImage vrací například velikost tohoto obrázku takto: Skutečná šířka v px * 96 / DpiX obrázku. Analogicky s výškou. Měl jsem kód který obrázek ořezával, teď už vím že je dobré zkontrolovat DPI a případně nastavit jinou velikost. Nebude to mít vliv například na velikost v px výsledného obrázku.

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *