4

Retina ディスプレイになってから、突然、この描画コードが機能しなくなったようです。描画されたイメージは以前よりもわずかにずれており、多少引き伸ばされているように見えます。

UIControl サブクラスの -drawRect: メソッドで何かを描画しています。そのUIControl内の現在のスケールは実際には2.0であることがわかりました。このコードは UIImage から CGImage を取得しますが、UIImage はおそらくスケールについて何も知りません。現在、いくつかのポイント値も取るメソッドにパラメータとして供給されます。

CGContextDrawImage(context, CGRectMake(drawingRect.origin.x, drawingRect.origin.y, img.size.width, img.size.height), [img CGImage]);

注: drawingRect はポイント単位です。NSLog 内の img.size.width は正しい値をポイント単位で出力しますが、[img CGImage] は Retina ディスプレイ用に @2x 画像を出力します。これを確認するためにチェックを行いました:

NSLog(@"image height = %f (CGImage = %d)", img.size.height, CGImageGetHeight([img CGImage]));

コンソールでの出力:image height = 31.000000 (CGImage = 62)

ここで @2x 画像をどのように処理しますか? すべての値にスケールを手動で掛ける必要がありますか? しかし、それはまた、画面上に実際に表示されている長方形を台無しにするでしょうか?

4

1 に答える 1

3

はい。

CGImageGetWidth([image CGImage]) == image.size.width * image.scale
CGImageGetHeight([image CGImage]) == image.size.height * image.scale

-[UIImage drawAtPoint:]または、-[UIImage drawInRect:]およびスケールを自動的に処理する他の同様の方法を使用できます。にドロップダウンするとCGImage、スケールを自分で処理する必要があります。

于 2010-09-19T10:33:43.817 に答える