頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


輝度データ配列からUIImageViewを作る方法

輝度のデータをもつ配列からUIImageViewを作るってお話だよ。

挑戦中の日本語OCRアプリでは画像のデータは配列に入れてるのが基本で特に画像にする必要はないんだけど、動作確認時にはいろいろと画像表示させたいんだ。で、そういう関数を作ったんだよ。まあ返り値はUIImageでもいいし、まだ高速化できる部分もあるけど、あまり気にしないでね。
UIImageView *makeImageViewFromArray(float array[] , int _width, int _height)
{
    size_t width = _width;
    size_t height = _height;
    size_t bitsPerComponent = 8;
    size_t bitsPerPixel = 32;
    size_t bytesPerRow = 4*width;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGBitmapInfo bitmapInfo = 5;
    bool shouldInterpolate = 1;
    CGColorRenderingIntent intent = 0;
    
    //arrayから必要な配列を作成する
    int nData = _width*_height;
    UInt8* dataArray = calloc(nData*4 , sizeof(UInt8));
    UInt8 br;
    for (int ii=0;ii < nData;ii++) {
        br = (UInt8)array[ii];
        *(dataArray+4*ii) = br;
        *(dataArray+4*ii+1) = br;
        *(dataArray+4*ii+2) = br;
        *(dataArray+4*ii+3) = 255;
    }
    CFDataRef data = CFDataCreate(NULL, dataArray, nData*4);
    CGDataProviderRef   dataProvider = CGDataProviderCreateWithCFData(data);
    
    // 画像を作成する
    CGImageRef  cgimage;
    
    cgimage = CGImageCreate(
                                    width, height,
                                    bitsPerComponent, bitsPerPixel, bytesPerRow,
                                    colorSpace, bitmapInfo, dataProvider,
                                    NULL, shouldInterpolate, intent);
    
    UIImage *image = [UIImage imageWithCGImage:cgimage];
    UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
    
    //解放
    CGImageRelease(cgimage);
    CGDataProviderRelease(dataProvider);
    CGColorSpaceRelease(colorSpace);
    CFRelease(data);
    free(dataArray);
    
    return imageView;
}
呼び出す側は輝度のデータが入った配列 float array[400*300]; みたいなのがあって、これだけだと縦横のサイズがわからないから各値も渡すってことで
UIImageView *imageView = makeImageViewFromArray(array , 400 , 300);
こんな感じでUIImageViewオブジェクトを得られるから後は煮るなり焼くなりお好きなようにしてね。
あー、もちろん得た画像は白黒だよ。

<< レンタカーのカーナビがすごくて驚いた   TopPage  二次元配列を使ってみた >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/655-ac95923e




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad