UIImage`の長さを取得しようとしています。画像の幅や高さではなく、データの大きさです。
UIImageの基礎となるデータはさまざまで、同じ "image" でもデータのサイズはさまざまです。UIImagePNGRepresentation や UIImageJPEGRepresentation を使用して、同等の NSData 構造体を取得し、そのサイズをチェックすることができます。
の基礎となるデータはさまざまで、同じ "image" でもデータのサイズはさまざまです。UIImagePNGRepresentation
UIImageJPEGRepresentation
NSData
UIImageのCGImageプロパティを使用します。 そして、CGImageGetBytesPerRow * と CGImageGetHeight の組み合わせを使って、UIImage のサイズを足せば、実際のサイズは数バイト以内に収まるはずです。 CGImageGetHeightの組み合わせで、UIImageのsizeを追加すれば、実際のサイズから数バイト以内に収まるはずです。
これは、ビットマップ操作の準備のためにmallocなどの目的で使用したい場合、圧縮されていない画像のサイズを返します(RGBに3バイト、アルファに1バイトの4バイトピクセルフォーマットを仮定しています)。
int height = image.size.height, width = image.size.width; int bytesPerRow = 4*width; if (bytesPerRow % 16) bytesPerRow = ((bytesPerRow / 16) + 1) * 16; int dataSize = height*bytesPerRow;
あなたの状況がよくわからないのですが。もし、実際のバイトサイズが必要なら、そのようなことはしないと思います。UIImagePNGRepresentationやUIImageJPEGRepresentationを使って、画像の圧縮データのNSDataオブジェクトを取得することができます。
圧縮されていない画像の実サイズ(ピクセルデータ)を取得したいのだと思います。UIImage*またはCGImageRefを生データに変換する必要があります。これはUIImageをIplImageに変換する例です(OpenCVより)。十分なメモリを確保し,CGBitmapContextCreate'の最初の引数にそのポインタを渡せばよいだけです.
UIImage *image = //Your image CGImageRef imageRef = image.CGImage; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); IplImage *iplimage = cvCreateImage(cvSize(image.size.width, image.size.height), IPL_DEPTH_8U, 4); CGContextRef contextRef = CGBitmapContextCreate(iplimage->imageData, iplimage->width, iplimage->height, iplimage->depth, iplimage->widthStep, colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault); CGContextDrawImage(contextRef, CGRectMake(0, 0, image.size.width, image.size.height), imageRef); CGContextRelease(contextRef); CGColorSpaceRelease(colorSpace); IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3); cvCvtColor(iplimage, ret, CV_RGBA2BGR); cvReleaseImage(&iplimage);
UIImage
の基礎となるデータはさまざまで、同じ "image" でもデータのサイズはさまざまです。UIImagePNGRepresentation
やUIImageJPEGRepresentation
を使用して、同等のNSData
構造体を取得し、そのサイズをチェックすることができます。UIImageのCGImageプロパティを使用します。 そして、CGImageGetBytesPerRow * と CGImageGetHeight の組み合わせを使って、UIImage のサイズを足せば、実際のサイズは数バイト以内に収まるはずです。 CGImageGetHeightの組み合わせで、UIImageのsizeを追加すれば、実際のサイズから数バイト以内に収まるはずです。
これは、ビットマップ操作の準備のためにmallocなどの目的で使用したい場合、圧縮されていない画像のサイズを返します(RGBに3バイト、アルファに1バイトの4バイトピクセルフォーマットを仮定しています)。
あなたの状況がよくわからないのですが。もし、実際のバイトサイズが必要なら、そのようなことはしないと思います。UIImagePNGRepresentationやUIImageJPEGRepresentationを使って、画像の圧縮データのNSDataオブジェクトを取得することができます。
圧縮されていない画像の実サイズ(ピクセルデータ)を取得したいのだと思います。UIImage*またはCGImageRefを生データに変換する必要があります。これはUIImageをIplImageに変換する例です(OpenCVより)。十分なメモリを確保し,CGBitmapContextCreate'の最初の引数にそのポインタを渡せばよいだけです.