UIImageに格納された画像のバイナリイメージをSQLiteのDBに保存をする方法
SQLiteの使い方はiPhoneSDKでSQLiteを使う方法に書いてあります。
サンプルとして使うテーブル
サンプルとして以下のようなテーブルを定義して、格納します。
バイナリデータを格納する項目はblobで定義します。
create table IMAGETABLE ( id integer, // なんとなくID size integer, // データサイズ data blob // バイナリデータ );
画像データの格納
UIImageのインスタンスメソッドのUIImagePNGRepresentationを使ってNSDataのインスタンスに変換してから、バイト配列としてテーブルに書き込みます。
画質よりサイズを優先するならば、UIImageJPEGRepresentationでもかまいません。
// 画像データはsampleimage(UIImage型)に格納されているとします。 NSData *imagedata = [[NSData alloc] initWithData:UIImagePNGRepresentation(sampleimage)]; // SQL char *sqlImageInsert = "insert into IMAGETABLE values(?,?,?)"; // クエリの実行方法等は別のエントリー"iPhoneSDKでSQLiteを使う方法(http://d.hatena.ne.jp/uosoft/20090619/1245341478)"参照 if(sqlite3_prepare_v2(database, sqlImageInsert, -1, &statement, NULL) == SQLITE_OK) { // この場合、idは適当 sqlite3_bind_int(statement, 1, 1); // NSDataのインスタンスメソッドを使ってサイズ取得する。 sqlite3_bind_int(statement, 2, [imagedata length]); // NSDataのインスタンスメソッドを使ってバイト配列、サイズをパラメータに設定してsqlite3_bind_blobでクエリにバインドする sqlite3_bind_blob(statement, 3, [imagedata bytes], [imagedata length], NULL); // 実行処理 sqlite3_step(statement); // 終了処理 sqlite3_finalize(statement); } // メモリ解放 [imagedata release];
DBより画像データを読む
NSDataのクラスメソッドinitWithBytesでDBよりバイナリデータを取得します。
UIImageのクラスメソッドimageWithDataに取得したバイナリデータを指定してUIImageのインスタンスを作成します。
// 画像データはsampleimage(UIImage型)に格納するとします。 UIImage *sampleimage; // SQL char *sqlImageSelect = "select size,data from IMAGETABLE where id=1"; // クエリの実行方法等は別のエントリー"iPhoneSDKでSQLiteを使う方法(http://d.hatena.ne.jp/uosoft/20090619/1245341478)"参照 if(sqlite3_prepare_v2(database, sqlImageSelect, -1, &statement, NULL) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { // NSDataのインスタンスメソッドinitWithBytesでDBよりバイナリデータを取得 NSData *imagedata = [[NSData alloc] initWithBytes:sqlite3_column_blob(statement, 2) length:sqlite3_column_bytes(statement, 1)]; // UIImageインスタンスに取得したバイナリを指定して初期化 // これでsampleimageにDBに保存した画像データが格納される sampleimage = [[UIImage alloc] imageWithData:imagedata]; } }
- 作者: Erica Sadun,株式会社クイープ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2009/02/12
- メディア: 大型本
- 購入: 20人 クリック: 474回
- この商品を含むブログ (60件) を見る