2012-09-14 9 views
16

UIImagedrawInRect:メソッドを使用して画像を描画しようとしています。コードは次のとおりです。UIImageのdrawInrect:スムーズ画像

UIImage *image = [UIImage imageNamed:@"OrangeBadge.png"]; 

UIGraphicsBeginImageContext(image.size); 

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

問題は画像がぼやけていることです。ここで(右側)得られる画像は(左側)元画像と比較さ:

Source image and blurred image

私は両方CGContextSetAllowsAntialiasing(UIGraphicsGetCurrentContext(), NO)CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), NO)を試してみたが、これで問題が解決しませんでした。

アイデア?

ありがとうございます。

答えて

29

網膜デバイスで開発している場合は、グラフィックスコンテキストの解像度に関連する可能性があります。試してみますか:

UIGraphicsBeginImageContextWithOptions(size, NO, 2.0f); 

これで網膜の解像度が可能になります。また、画像を@ 2x解像度で利用できるようにする必要があります。

あなたにも非網膜デバイスをサポートする場合は、使用することができます。

if ([UIScreen instancesRespondToSelector:@selector(scale)]) { 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0f); 
} else { 
    UIGraphicsBeginImageContext(newSize); 
} 
+2

私は、 '=='使用してフロート平等をチェックすることをお勧めしません。スケールを '0.f'に設定するだけで、フレームワークが残りの部分を処理します。 (http://stackoverflow.com/questions/2765537/how-do-i-use-the-nsstring-draw-functionality-to-create-a-uimage-from-textを参照してください) – Mazyod

+1

ありがとうございました!これは問題を解決します。 'if([UIScreen instancesRespondToSelector:@selector(scale)])' - iOS3のサポートのためのこの行ですか? 'scale'プロパティは、iOS 4.0からサポートされています。 – tonytony

+0

@Mazyod私は、 '0.0f'が、currectデバイスの網膜であるのか網膜でないのかにかかわらず、フレームワークが正しいスケールを扱うことを理解して正しいのですか? – Timo

関連する問題