4

私はここで完全に困惑しています。私は、いじくり回してボタンを作成している一連の小さな画像を持っています:

ここに画像の説明を入力

そして、ご覧のとおり、それらはすべてき​​ちんと鮮明でシャープであり、プレビューでpngファイルを開いたときにこれを保持します。

ただし、Interface Builder でそれらを使用する場合はNSButtonsNSImageViewsScaling を None に設定します。

ここに画像の説明を入力

画像がひどくぼやけます。私は何を間違っていますか?どこから始めて何を試せばよいかわかりません。アイコンに戻って、ピクセルパーフェクトにする必要がありますか? それはアンチエイリアシングまたはそれらの線に沿った何かと関係がありますか?


編集: 何らかの理由で、NSButtons と NSImageViews が画像の高解像度バージョンを読み込んでいるように見えますが、通常のディスプレイを使用していても、それらに追加したわずかな水色のストロークで識別できます。何らかの理由で、Quartz Debug はこれらを高解像度の画像として識別せず、赤味がありません。@2x 画像への参照を削除すると、問題は解決します...しかし...

4

7 に答える 7

3

私は以前にこの問題を抱えています。画像の DPI が 72 でない場合、画像サイズが間違っているようです。以下のコードを使用して、実際のサイズを取得できます。

NSImage *image = [NSImage imageNamed:@"image"];
NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
NSSize size = NSMakeSize([rep pixelsWide], [rep pixelsHigh]);
[image setSize: size];
于 2012-06-26T07:46:29.240 に答える
1

Interface Builder および でイメージ名を指定する場合は、の代わりに[NSImage imageNamed:]を使用してください。iOS は後者の場合に を追加するほどスマートですが、Mac OS X はそうではありません。後者の場合は非網膜画像を読み込みますが、最初の場合は追加します (そのような画像が存在する場合)。foofoo.png@2x@2x

于 2012-11-07T13:57:35.947 に答える
0

ButtonsIBまたはコードで画像を割り当てていますか?

コードでそれを行っている場合は、画像のコピーを作成し(たとえば[myImage copy])、そのコピーをボタンに割り当てると、これを解決できる場合があります。

于 2012-06-26T14:34:42.990 に答える
0

私の場合 (カスタム NSOutlineView でアイコンを描画する)、drawRect の x、y 原点が int 値に丸められていることを確認する必要がありました。

NSMakeRect( round(NSMinX(cellFrame)-iconSize.width), 
round(NSMidY(cellFrame)-(iconSize.height/2.0f)), …);
于 2012-12-27T12:33:39.387 に答える
0

これは実際には DPI に関する以前の投稿への返信ですが、直接返信することはできませんでした。その投稿のコードは、実際のピクセル寸法を示していました (つまり、問題はありませんでした)。ただし、私の場合は間違いなく画像 DPI が原因でした。私が見た症状は次のとおりです。

  • NSImageViews を No Scaling に設定すると、画像が押しつぶされて表示されます。
  • NSImageViews を Axes Independently に設定すると、NSImageViews の寸法が画像の寸法と正確に一致するように設定されていれば、ほとんどの画像が正しく表示されます。
  • ただし、この場合でも、一部の画像には奇妙なアーティファクトが含まれていましたが、プレビューまたは他の場所で同じ画像を表示した場合には存在しませんでした (さらに言えば、Interface Builder を介して表示した場合でも、それらは実行時にのみ表示されました)。

問題があった画像は 72 以外の DPI でした。画像を 72 DPI で再作成すると、上記の動作はすべてなくなりました。

これはかなり混乱する問題でした。これが誰かの役に立てば幸いです。

于 2013-03-22T18:12:31.857 に答える
0

私にとっては、画像のスケーリングを none に設定するだけで済みました。

Interface Builder で

ここに画像の説明を入力

コード内

NSImageCell *image;
[image setImageScaling:NSImageScaleNone];

NSButtonCell *button;
[button setImageScaling:NSImageScaleNone];
于 2015-04-03T05:52:02.547 に答える