Zmień rozmiar UIImage z proporcjami?
Używam tego kodu do zmiany rozmiaru obrazu na iPhonie:
CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0);
UIGraphicsBeginImageContext(screenRect.size);
[value drawInRect:screenRect blendMode:kCGBlendModePlusDarker alpha:1];
UIImage *tmpValue = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Który działa świetnie, o ile proporcje obrazu odpowiadają proporcjom nowego obrazu o zmienionym rozmiarze. Chciałbym zmodyfikować to tak, że zachowuje prawidłowe proporcje i po prostu umieszcza czarne tło wszędzie tam, gdzie obraz nie pojawia się. Tak więc nadal kończyłbym z obrazem 320x480, ale z czernią na górze i na dole lub po bokach, w zależności od oryginalnego rozmiaru obrazu.
Czy jest na to łatwy sposób podobne do tego, co robię? Dzięki!
1 answers
Po ustawieniu rect ekranu, zrób coś takiego, aby zdecydować, w którym rect narysować obraz:
float hfactor = value.bounds.size.width / screenRect.size.width;
float vfactor = value.bounds.size.height / screenRect.size.height;
float factor = fmax(hfactor, vfactor);
// Divide the size by the greater of the vertical or horizontal shrinkage factor
float newWidth = value.bounds.size.width / factor;
float newHeight = value.bounds.size.height / factor;
// Then figure out if you need to offset it to center vertically or horizontally
float leftOffset = (screenRect.size.width - newWidth) / 2;
float topOffset = (screenRect.size.height - newHeight) / 2;
CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);
Jeśli nie chcesz powiększać obrazów mniejszych niż ekran, upewnij się, że factor
jest większa lub równa jednej (np. factor = fmax(factor, 1)
).
Aby uzyskać czarne tło, prawdopodobnie chcesz ustawić kolor kontekstu na czarny i wywołać fillRect przed narysowaniem obrazu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-29 18:21:43