次のコードで画像を回転させています。
CGAffineTransform rotate = CGAffineTransformMakeRotation( [ratio floatValue] );
[imageView setTransform:rotate];
しかし、それは鋭いエッジを持っていません、誰かがこれの解決策を知っていますか?
これが私が得る画像です:
次のコードで画像を回転させています。
CGAffineTransform rotate = CGAffineTransformMakeRotation( [ratio floatValue] );
[imageView setTransform:rotate];
しかし、それは鋭いエッジを持っていません、誰かがこれの解決策を知っていますか?
これが私が得る画像です:
UIImageViewのCALayerを使用して画像をラスタライズすると、最適なアンチエイリアスが提供されます。
imageView.layer.shouldRasterize = YES;
画像自体のエッジは、ピクセルグリッドに直接配置されており、補間されていないため、ギザギザに見えます。 最近隣内挿法は最も単純な種類の内挿法であり、ピクセルグリッドAがあり、画像をピクセルグリッドBに移動した場合、グリッドBのピクセルは、グリッドAから最も近いピクセルを選択するだけで選択されます。他の形式の内挿法では、グリッドBのピクセル値に到達するための最も近いピクセルの加重平均。
ギザギザのエッジを持つ画像は、最近隣内挿法を使用しているように見えます。これは、iPhoneのアフィン変換のデフォルトタイプの内挿法である可能性があります。
最近傍以外の補間スキームを使用すると、エイリアシング効果が発生します。この場合、あるピクセルグリッドから別のピクセルグリッドに転送するときにサブサンプリングが完全ではありません。この効果により、画像自体のエッジが他の場合よりもぼやけて見えるようになります。
画像に1pxの透明な境界線を追加するだけです
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext( imageRect.size );
[image drawInRect:CGRectMake(1,1,image.size.width-2,image.size.height-2)];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
画像を変換するときはいつでも(90°の増分を除く)、ピクセルの補間によりエッジがわずかに柔らかくなります。
エッジのアンチエイリアスを有効にするInfo.plistに設定できるキーUIViewEdgeAntialiasingがあります。
次の回答で説明されているように:transformプロパティを使用してUIImageViewを回転すると、エッジがピクセル化されます
最も簡単な解決策:
このキーと値のペアをInfo.plistに追加するだけです:UIViewEdgeAntialiasingをYESに設定します。