0

iOSプログラミングを勉強しています。

私は画像を処理する必要があります。

BMPファイルに画像を作成する必要があります。ただし、iOS は BMP ファイルの作成をサポートしていません。

だから多分私はBMPファイルを作ることができるポインタを使うと思います。

BMP のヘッダーを作成します。そしてそれをNSDataオブジェクトに入れます。

今、私はそれに画像データの保存を残しましたNSData.(私はbmpDataと言います)

ここから私の疑問が始まります。

サイズが128 x 64の画像が必要です。

コンテキストから取得しUIImageます。(私は画像1と言います)

CGSize128 x 64の a を作成します。

そのサイズを使用してcontext2を作成し、image1を描画します

UIImage、サイズが 128 x 64 の context2 から、サイズ変更された image1 を取得します。

image2を作成しUIImageViewて使用すると、正常に動作します。良い。image2 よくできています。

だから私はunsigned char *であるポインタを宣言しました。

unsigned char *bmpDataPointer = (unsigned char *)image2;

そして、私は for ループを使用します

for(int i = 0; i < 64; ++i)
{
    for(int j = 0 ; j < 128; ++j)
    {
       // dataObj and bmpData are different NSData object
       // dataObj just contain bitmap data to check my pointer works fine or not.
       [dataObj appendBytes:&(bitmapDataPointer[i*1 + j]) length:sizeof(char)];
    }
}

そしてUIImage、データが有効であることを確認するために作成しますが、失敗します。

UIImage *createdImageUsedByaPointer = [UIImage imageWithData:dataObj];
if(createdImageUsedByaPointer == nil)
{
  NSLog(@"nil!");
}

よし、走れ。文字列 nil が表示されます。

何故ですか?コンテキスト サイズを 128 x 64 にするので、128 x 64 回ループします。

しかし、それはうまくいきません。

どうすれば修正できますか??

ポインターを使用するためにどのように処理できUIImageますか??

誰かが私を助けてください。

4

2 に答える 2

0

.bmp 形式が必要な理由はわかりませんが、ImageMagick がエクスポートを処理します。

この lib ImageMagick for iOSと以下のコードを使用します。

UIImage *img9 = [UIImage imageNamed:@"00009_face.jpg"];
MagickWand *bmpWand = NewMagickWand();
NSData *bmpObj = UIImagePNGRepresentation(img9);
MagickSetFormat(bmpWand, "bmp");
MagickReadImageBlob(bmpWand, [bmpObj bytes], [bmpObj length]);

size_t bmp_size;
unsigned char * bmp_image = MagickGetImagesBlob(bmpWand, &bmp_size);
NSData *bmpData = [[[NSData alloc] initWithBytes:bmp_image length:bmp_size] autorelease];
free(bmp_image);
DestroyMagickWand(bmpWand);

NSArray *pathsArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentDirectory = [pathsArray objectAtIndex:0];
NSString * bmpPath = [documentDirectory stringByAppendingPathComponent:@"test2.bmp"];
[bmpData writeToFile:bmpPath atomically:NO];

NSLog(@"bmpPath %@", bmpPath);
于 2012-07-04T05:21:52.937 に答える
0

なぜそんなに複雑な中にいるのですか?

次のようにビットマップ コンテキストを作成できます。

CGContextRef context = CGBitmapContextCreate(data, width, height, 
            bitsPerComponent, 
            bytesPerRow, colorSpace, 
            kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);


CGColorSpaceRelease(colorSpace);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *result = [UIImage imageWithCGImage:imageRef];

ここにデータはあなたの画像ですNSData

于 2012-07-04T05:13:13.470 に答える