メモリ上のデータからNSImageオブジェクトを作成する

CocoaFrameworkのNSImageオブジェクトをメモリ上の画像ファイルデータから作成する方法についてのメモ書きです。
これが出来るようになると、例えば汎用ストリームから画像データを読み込む処理も実現できるようになります。

サポートしている画像ファイルの形式はBMPやPNG、JPEGなどです。
画像データは既にメモリ上に読み込まれているものとします。

    char* imageData;    // 画像データ
    int imageDataSize;  // 画像データのサイズ

まず、NSDataオブジェクトを読み込んだ画像データから作成します。

    NSData* imgData = [NSData dataWithBytes:imageData length:imageDataSize];

作成したNSDataオブジェクトよりNSImage initWidthDataメソッドでNSImageオブジェクトを作成します。

    NSImage* img = [[NSImage alloc] initWithData:imgData];

作成されたNSImageオブジェクトの画像の寸法やピクセル深度などは、NSBitmapImageRepオブジェクトから取得します。
これは、以下のようにして使います。

    NSBitmapImageRep* imgRep = [NSBitmapImageRep imageRepWithData:[img TIFFRepresentation]];
    int width           = [imgRep pixelsWide];
    int height          = [imgRep pixelsHigh];
    int bytesPerPixel   = [imgRep samplesPerPixel];
    void* data          = [imgRep bitmapData];

ここまでの情報を取得できればアプリケーションから描画したり編集したりエフェクトを加えたりと様々なことが出来るようになるでしょう。