2

画像をスケーリングする比率を決定するために、次のコードを使用しています ( Trevor Harmon の UIImage+Resizeから借用)。

CGFloat horizontalRatio = 600 / CGImageGetWidth(imageRef);
CGFloat verticalRatio = 600 / CGImageGetHeight(imageRef);
CGFloat ratio = MAX(horizontalRatio, verticalRatio);

600 は、スケーリングされた画像に必要な最大サイズを表します。CGImageGetWidth と CGImageGetHeight は size_t を返します。これは、ARC によれば、iPhone プラットフォーム (iOS 5) では unsigned long に評価されます。現在のコードの問題は、ratio が常に 0.0000 と評価されることです。imageRef の幅と高さは実際には w=768、h=780 なので、比率は MAX(0.781, 0.769) = 0.78 になるはずです。どうすればいいですか?

PS UIImage の initWithCGImage:scale:orientation に上記のコードを使用すると、スケールが予想とは異なる動作をすることがわかりました。比率 0.78 を渡すと、画像が拡大されました。幅または高さを目的のサイズ (CGImageGetWidth(imageRef) /600 など) で割ると、問題が修正されました。

4

1 に答える 1

3

適切な除算を行うには、1 つの値を float にする必要があります。整数除算では常に浮動小数点数が切り捨てられます。最も簡単な解決策は、数値を float リテラルに変換することです。

CGFloat horizontalRatio = 600.0f / CGImageGetWidth(imageRef);
CGFloat verticalRatio = 600.0f / CGImageGetHeight(imageRef);
CGFloat ratio = MAX(horizontalRatio, verticalRatio);
于 2012-01-06T15:48:22.280 に答える