画像の表示を行う時に、原画サイズ以外で表示するとイメージの拡大縮小が発生します。このときに、いかにイメージのクオリティを落とさないようにするかということで、画像の補間という処理が行われます。
Photoshopのような画像ソフトでも、画像の拡大縮小時の方法を3種類から選べますが、同様のことがCocoaのフレームワークでも用意されています。
推奨環境 この解説は、以下の環境を前提に作成し、動作確認等を行っています。ご確認ください。
改版履歴
typedef enum NSImageInterpolation { NSImageInterpolationDefault, // デフォルト NSImageInterpolationNone, // 補間しない(高速) NSImageInterpolationLow, // 低画質補間 NSImageInterpolationHigh // 高画質補間(低速) } NSImageInterpolation;
画質的には3段階の指定があります。画質が低いとそれだけ処理が速くなります。デフォルトを選んでおくと、システムにお任せになります。現在の私の環境では低画質が選択されているようですが、システムのバージョンやマシンによって変わるかもしれません。
この補間法を以下のようにしてセットします。
// カレントグラフィックコンテキストを取得 NSGraphicsContext* gc = [ NSGraphicsContext currentContext ]; // 補間法をセット [ gc setImageInterpolation : NSImageInterpolationHigh ];
実際にどれだけ違うのかを見てみましょう。まずは高画質。この写真には、等間隔で2ドットの縦横の線が書かれていまして、それを縮小して表示させています。
続いて、低画質。縦横の線がいくつかかすれていることが分かります。
最後に、補間なしです。いくつかの線が見えなくなっていることが分かります。
このように、画質の劣化は目に見えるレベルで発生します。特に文字や線が入った画像では一目で分かります。性質を理解してうまく使い分ける必要がありそうです。