2012-02-25 11 views
11

私はCALayerに画像を描画する必要があります。なぜなら、さまざまなエフェクト、アニメーション、およびフィルタを実行する必要があるからです。私が何をしても、CGContextを単純に描画すると、常にピクセル化されて描画されます。 網膜のコンテキストに描画する正しい方法は何ですか?網膜のCGContextDrawImageは画像をピクセル化しますか?

これは私が今やっていることです:

CGImageRef plateImage = [[UIImage imageNamed:@"someImage"] CGImage]; 
CGFloat width = CGImageGetWidth(plateImage), height = CGImageGetHeight(plateImage); 
CGFloat scale = [[UIScreen mainScreen] scale]; 

NSLog(@"Scale: %f\nWidth: %f\nHeight: %f", scale, width, height); 
CGContextTranslateCTM(_context, 0, height/scale); 
CGContextScaleCTM(_context, 1.0, -1.0); 

CGContextDrawImage(_context, CGRectMake(0, 0, width/scale, height/scale), plateImage); 

答えて

18

あなたが適切層の内容スケールを設定する必要があります。

myLayer.contentsScale = [UIScreen mainScreen].scale 
+0

aaaaaa!私はCGのドキュメントをどこでも見ていました。レイヤーの問題だったと思っていませんでした。ありがとうございました! – shein

+0

素晴らしい。ありがとうございました。 – darkheartfelt

23

私は同じ問題がありましたが、解決策が機能していないようです。

UIGraphicsBeginImageContext()が私の問題を引き起こしていることが判明しました。私は、同じ問題を抱えている将来のユーザーのために私のソリューションをここに掲載しています。

のiOS 4.0から、あなたが使用する必要があります。

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

代わりの

UIGraphicsBeginImageContext(size); 

あなたがピクセル化画像をしたくない場合。

+0

ありがとうございます!なぜ私はこの作品が理解できると言うことはできませんが、それはありません。 – anonymouse

+2

これは正解です! – Fydo

+2

私はこれを受け入れられた答えと組み合わせて最高の結果が得られたことに注目して嬉しいです: 'UIGraphicsBeginImageContextWithOptions(imageSize、NO、[UIScreen mainScreen] .scale);' – bplattenburg

関連する問題