3

私のアプリでは、カメラと写真ライブラリを使用してUIImageを取得しています。次に、
このUIImageを通常のサイズの約20倍に縮小し、UIImageに基づいてNSDataオブジェクトを設定します。

_regularImage = [self resizeImage:_takenImage width:100 height:100];


-(UIImage *)resizeImage:(UIImage *)anImage width:(int)width height:(int)height
{

    CGImageRef imageRef = [anImage CGImage];

    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);

    if (alphaInfo == kCGImageAlphaNone)
        alphaInfo = kCGImageAlphaNoneSkipLast;


    CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef), 4 * width, CGImageGetColorSpace(imageRef), alphaInfo);

    CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);

    CGImageRef ref = CGBitmapContextCreateImage(bitmap);
    UIImage *result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);
    CGImageRelease(ref);

    return result;      
}

NSData *image1Data = UIImageJPEGRepresentation(_regularImage, 1);

私はこれを引き起こす可能性のある他の何かを理解できないようです

ありがとうございました

LittleRy

4

1 に答える 1

2

ここでの問題は、ビットマップコンテキストまたはUIImageを間違った方法で作成している可能性があります。デバッグして、_regularImageがnilかどうか、または無効かどうかを確認してみてください。画像を拡大縮小するには、 ANImageBitmapRepと呼ばれるサードパーティのライブラリを使用することをお勧めします。これは、iPhoneでの画像の切り抜き、サイズ変更、回転などを簡単に行える小さなクラスのセットです。UIImageのスケーリングは、次のように実行できます。

ANImageBitmapRep * irep = [ANImageBitmapRep imageBitmapRepWithImage:myImage];
[irep setSize:BMPointMake(myWidth, myHeight)]; // scale the image
UIImage * theImage = [irep image];
[irep release];
NSData * jpeg = UIImageJPEGRepresentation(theImage, 1);

この種のコードでは、それUIImageJPEGRepresentationが問題になるとは思えません。ANImageBitmapRepクラス自体が内部で処理を行うため、CGContextRef作業が非常に簡単になります。

于 2011-08-21T03:45:09.717 に答える