3

ディスクから画像 (NSImage) を読み込み、MAC の NSImageView に描画します。問題なく、画像はきれいに見えます。

NSImageView に描画した後、同じ画像で以下の関数を呼び出し、戻り値を同じ NSImageView に描画します。結果として得られる画像は、他に何もせずに lockFocus と UnlockFocus だけを行ったとしても、非常にぼやけています。

-(NSImage*)addTarget:(NSImage*)image
{
    [image lockFocus]; // this image is sharp and clear
    [image unlockFocus];
    return image;      // this image is extremely blurry
}

誰もそれを修正する理由または方法を知っていますか?

ラフありがとう

4

2 に答える 2

0

達成したいことを言わないので、問題を解決するのは難しいです。なぜそのメソッドを書いたのか、なぜそれを呼び出したのか、このメソッドは何を期待しているのか? あなたは言った:すべてI do is lockFocus and UnlockFocus without doing anything else.実際に呼び出しているように見えますlockFocus unlockFocus(そしてその間に何もありません)何もしません。しかし、それは間違っています。[image lockFocus]だけでimage劇的に変わります。NSImageオブジェクトには、ゼロ、1 つ (ほとんどの場合)、または複数 (アイコンまたは一部の TIFF) の classのオブジェクトが含まれますNSImageReplockFocusこの画像の を呼び出すとNSImageRep、画面上での描写に最適な が選択されます。次に、指定されたサイズの画像を 72 dpi (Retina スクリーンの場合は 144 dpi) の解像度でレンダリングするために必要なピクセル数 (ただし、画面の場合) を計算します。そして、NSImageRep表現のリストから、代わりに新しい NSImageRep を作成します。以前の OS バージョン (10.6 より前) では、NSCachedImageRepが作成されました。しかし、今NSCGImageSnapshotRepではボンネットの下に CGImage が作成されています。作る

NSLog(@" image is:\n%@", image );

の呼び出しの前lockFocusと後に と を呼び出すunlockFocusと、何が起こるかがわかります。高解像度の画像の場合、ピクセル数が減少します。これは、品質の低下に他なりません。そして、それはあなたのイメージをぼやけさせます。

于 2013-07-14T11:19:58.723 に答える