Cocoaはやっぱり!
画像の補間
時には綺麗に、時には素早く
今回のテーマ

画像の表示を行う時に、原画サイズ以外で表示するとイメージの拡大縮小が発生します。このときに、いかにイメージのクオリティを落とさないようにするかということで、画像の補間という処理が行われます。

Photoshopのような画像ソフトでも、画像の拡大縮小時の方法を3種類から選べますが、同様のことがCocoaのフレームワークでも用意されています。

推奨環境 この解説は、以下の環境を前提に作成し、動作確認等を行っています。ご確認ください。

改版履歴

定義
NSImageInterpolation : 補間法
typedef enum NSImageInterpolation { NSImageInterpolationDefault, // デフォルト NSImageInterpolationNone, // 補間しない(高速) NSImageInterpolationLow, // 低画質補間 NSImageInterpolationHigh // 高画質補間(低速) } NSImageInterpolation;

画質的には3段階の指定があります。画質が低いとそれだけ処理が速くなります。デフォルトを選んでおくと、システムにお任せになります。現在の私の環境では低画質が選択されているようですが、システムのバージョンやマシンによって変わるかもしれません。

使用例

この補間法を以下のようにしてセットします。

レスポンス取得 : MyClass.m
// カレントグラフィックコンテキストを取得 NSGraphicsContext* gc = [ NSGraphicsContext currentContext ]; // 補間法をセット [ gc setImageInterpolation : NSImageInterpolationHigh ];

実際にどれだけ違うのかを見てみましょう。まずは高画質。この写真には、等間隔で2ドットの縦横の線が書かれていまして、それを縮小して表示させています。

続いて、低画質。縦横の線がいくつかかすれていることが分かります。

最後に、補間なしです。いくつかの線が見えなくなっていることが分かります。

このように、画質の劣化は目に見えるレベルで発生します。特に文字や線が入った画像では一目で分かります。性質を理解してうまく使い分ける必要がありそうです。