1

プロジェクトで CoreData を使用しています。プロジェクトで UIImageToDataTransformer クラスを使用して UIImage を保存できます。また、私はopencvライブラリを使用しており、いくつかのcvMat構造体を保存する必要があります(構造体ですよね?)。トランスフォーマブルに関するいくつかの投稿を読みましたが、それをコアデータに保存してフェッチする方法がまだわかりません。

「Human」というエンティティが 1 つあり、ProjVal という属性があり、その型は cvMat のデータを保持する変換可能です。

私の次のステップは何ですか?

その下に UIImage のトランスフォーマー クラスがありますが、どうすれば cvMat のデータを変換できますか? アドバイスありがとうございます。

#import "UIImageToDataTransformer.h"
@implementation UIImageToDataTransformer

+ (BOOL)allowsReverseTransformation {
    return YES;
}

+ (Class)transformedValueClass {
    return [NSData class];
}

- (id)transformedValue:(id)value {
    return UIImagePNGRepresentation(value);
}

- (id)reverseTransformedValue:(id)value {
    return [[[UIImage alloc] initWithData:value] autorelease];
}
@end

編集:その型を Transformable 型ではなく Binary Data 型として使用する方が良い方法ですか? エンティティに自動作成されたクラスを使用しています。

保存中にこのコードを使用します

CvMat *mat = cvCreateMat(3, 3, CV_32FC1);
for (int i=0; i<9; i++) {
    mat->data.fl[i] = 1.0f;
}


NSData *projValData = [[NSData alloc] initWithBytes:&mat length:sizeof(mat)];
human.projVal = projValData;

そしてそれを読み返しながら:

CvMat *mat;
NSData *data =  [[humansArray objectAtIndex:0] projVal];
memcpy(&mat,[data bytes],[data length]);
if (mat) {
    NSLog(@"if mat works");
    for (int i=0; i<9; i++) {
        NSLog(@"%f",mat->data.fl[i]);
    }
}

うまく機能せず、for ループでクラッシュしました。私の間違いはどこですか?

4

1 に答える 1

1

cvMat データの生のバイトへのポインター (およびサイズ) を取得できますか?

その場合、実装でdataWithBytes:length:は NSData のクラス メソッドを使用し、 では(インスタンス) メソッドを使用できます。transformedValue:bytesreverseTransformedValue:

于 2011-04-26T20:07:00.620 に答える