1

ファイル操作への読み取り/書き込みを行わずに、Pix から UIImage を取得したいと考えています。CGBitmapContextCreate エラーが発生します。

Pix 構造は次のとおりです。

    struct Pix
{
     l_uint32             w;           /* width in pixels                   */
     l_uint32             h;           /* height in pixels                  */
     l_uint32             d;           /* depth in bits                     */
     l_uint32             wpl;         /* 32-bit words/line                 */
     l_uint32             refcount;    /* reference count (1 if no clones)  */
     l_int32              xres;        /* image res (ppi) in x direction    */
                                       /* (use 0 if unknown)                */
     l_int32              yres;        /* image res (ppi) in y direction    */
                                       /* (use 0 if unknown)                */
     l_int32              informat;    /* input file format, IFF_*          */
     char                *text;        /* text string associated with pix   */
     struct PixColormap  *colormap;    /* colormap (may be null)            */
     l_uint32            *data;        /* the image data                    */
 };
 typedef struct Pix PIX;

完全なドキュメントはここにあります: http://tpgit.github.com/Leptonica/pix_8h_source.html

これが私の試みです:

- (UIImage *) getImageFromPix:(PIX *) thePix
{
    CGColorSpaceRef colorSpace;
    uint32_t *bitmapData;

    size_t bitsPerComponent = thePix->d;

    size_t width = thePix->w;
    size_t height = thePix->h;

    size_t bytesPerRow = thePix->wpl * 4;

    colorSpace = CGColorSpaceCreateDeviceGray();

    if(!colorSpace) {
        NSLog(@"Error allocating color space Gray\n");
        return NULL;
    }

    // Allocate memory for image data
    bitmapData = thePix->data;

    if(!bitmapData) {
        NSLog(@"Error allocating memory for bitmap\n");
        CGColorSpaceRelease(colorSpace);
        return NULL;
    }

    //Create bitmap context

    CGContextRef context = CGBitmapContextCreate(bitmapData, 
                                    width, 
                                    height, 
                                    bitsPerComponent, 
                                    bytesPerRow, 
                                    colorSpace, 
                                    kCGImageAlphaNone); 
    if(!context) {
        free(bitmapData);
        NSLog(@"Bitmap context not created");
    }

    CGColorSpaceRelease(colorSpace);

    CGImageRef imgRef = CGBitmapContextCreateImage(context);
    UIImage * result = [UIImage imageWithCGImage:imgRef];
    CGImageRelease(imgRef);
    CGContextRelease(context);

    return result;
}

これが私が得ているエラーです:

<Error>: CGBitmapContextCreate: unsupported parameter combination: 1 integer bits/component; 1 bits/pixel; 1-component color space; kCGImageAlphaNone; 16 bytes/row.
4

1 に答える 1

2

CGBitmapContextCreate()は、ピクセル形式のすべての組み合わせをサポートしているわけではありません。サポートされていない Pix 形式が多数ある可能性があります。サポートされているフォーマットの完全なリストは、Quartz 2D Programming Guideにあります。iOS でサポートされる形式はかなり限られています。Pix から取得したものを、サポートされている形式のいずれかに変換する必要がある場合があります。一般的にこれを行うのは難しいですが、特定のケースでは、常に 1 ビット/ピクセル、1 ビット/コンポーネント、アルファ チャンネルがない場合、8 ビット/ピクセル、8 ビットのグレー形式に変換するのはそれほど難しくありません。 /component、iOS でサポートされているアルファ チャネルはありません。

于 2012-08-04T01:59:34.140 に答える