2

私のアプリケーションでは、16 進数のイメージがあります。BLOB 型に変換してデータベースに保存したい。

どのようにそれが可能です。

よろしく KL BAIJU

4

1 に答える 1

0

私の知る限り、これは base64 でエンコードされています。Web サービスから画像データを取得した場合、受信した文字列データを base64 エンコードにエンコードする必要があるとします。

NSData* data=[[NSData alloc] initWithBase64EncodedString:base64ImageString];

次に、データを簡単に UIImageView に取得できます。

UIImageView* imageView=[[UIImageView alloc] initWithImage:[UIImage imageWithData:data]];

画像データを Blob データ型として sqlite に保存するには、次のスニペットを使用します

if(insertStmt == nil) {
   const char *sql = "insert into TableName values(?,?)";
    if(sqlite3_prepare_v2(database, sql, -1, &insertStmt, NULL) != SQLITE_OK)
       NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database));
    }

sqlite3_bind_text(insertStmt, 1, [imageName UTF8String], -1, SQLITE_TRANSIENT);

NSData *imgData = UIImagePNGRepresentation(imageView.image);

int returnValue = -1;

returnValue = sqlite3_bind_blob(insertStmt, 2, [imgData bytes], [imgData length], NULL);

if(returnValue != SQLITE_OK)
   NSLog(@"Not OK!!!");

if(SQLITE_DONE != sqlite3_step(insertStmt))
   NSAssert1(0, @"Error while inserting. '%s'", sqlite3_errmsg(database));

sqlite3_reset(insertStmt);

[data release];
[imageView release];

データベースから画像データを取得する

if(detailStmt == nil) {
 const char *sql = "Select * from TableName";
  if(sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) != SQLITE_OK)
    NSAssert1(0, @"Error while creating detail view statement. '%s'", sqlite3_errmsg(database));
 }

 if(SQLITE_DONE != sqlite3_step(detailStmt)) {
 NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(detailStmt, 2) length:sqlite3_column_bytes(detailStmt, 2)];

  if(data == nil)
     NSLog(@"No image found.");
  else
    imageview.image = [UIImage imageWithData:data];        
 }  

よろしく、
マユール

于 2012-04-18T11:36:37.410 に答える