0

私のiPhoneアプリでは、写真をキャプチャしてsqliteデータベースに保存する必要があります。

 NSString *insertQuery = [NSString stringWithFormat:@"INSERT INTO ProfileTable (NAME, MOBILE, EMAIL, ProfilePICTURE) VALUES(?, ?, ?, ?)"];

                  const char *insert = [insertQuery UTF8String];
                  if(sqlite3_prepare_v2(contactsDB, insert, -1, &insertStatement, NULL) != SQLITE_OK) {
                        NSLog(@"Error while creating insert Statement");
                  }
                  else 
                  {
                        sqlite3_bind_text(insertStatement, 1, [name UTF8String], -1, SQLITE_TRANSIENT);
                        sqlite3_bind_text(insertStatement, 2, [mobile UTF8String], -1, SQLITE_TRANSIENT);
                        sqlite3_bind_text(insertStatement, 2, [email UTF8String], -1, SQLITE_TRANSIENT);


                        sqlite3_bind_blob(insertStatement, 4, [profilePic bytes], [contactImage length], NULL);




                  }
            }


// Same Query  for insert statement also

そのファイルをblobタイプの形式で保存しましたが、それによって大量のメモリが占​​有され、メモリの警告が発生します。

だから私はその考えを持っています。

キャプチャした画像をpngファイルとして保存し、「image1.png」と仮定して、そのタイトル「image1.png」をvarcharタイプとして挿入し、表示するときにその名前のファイルを取得します。

これを行う方法の助け

4

3 に答える 3

1

ドキュメントディレクトリ(または画像を保存する可能性のある他のディレクトリ)を取得します。

/**
 Returns the URL to the application's Documents directory.
 */
- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

画像をpngとして保存:

NSURL *documentsDirURL = [self applicationDocumentsDirectory];
NSURL *fileURL = [documentsDirURL URLByAppendingPathComponent:@"some-image-name.png"];
NSData* data = UIImagePNGRepresentation(image);
[data writeToURL:fileURL atomically:YES];
NSString *filePath = [fileURL path];

// now save your filePath as string to sqlite

ファイルシステム内の適切なディレクトリの場所、命名規則、ファイル名がすでに存在しない場合はファイル名の生成など、詳細を入力する必要があることに注意してください。

編集:

画像のシリアルネーミングに関するヘルプを次に示します。さまざまな解決策があります。

NSUserDefaultsキーを使用してにエントリを作成します@"lastImageNumber"。新しい画像名が必要な場合:

NSInteger imageNumber = [[NSUserDefaults standardUserDefaults] integerForKey:@"lastImageNumber"] + 1;
NSString *imageName = [NSString stringWithFormat:@"image%05d.png",imageNumber];
// save the new imageNumber in the `NSUserDefaults`
[[NSUserDefaults standardUserDefaults] setInteger:imageNum ForKey:@"lastImageNumber"];
于 2012-09-24T11:42:19.883 に答える
1

appDelegate.hファイルにintカウンターを追加します

また、アプリケーションdidFinishLaunchingWithOptionsメソッドを追加します。

counter = 0;
if(![[NSUserDefaults standardUserDefaults] integerForKey:@"ImageNumber"])
{
   [[NSUserDefaults standardUserDefaults] setInteger:counter ForKey:@"ImageNumber"]
}
else
{
   counter = [[NSUserDefaults standardUserDefaults] integerForKey:@"ImageNumber"];
}

また、このメソッドをappDelegate.hファイルに追加します

+ (NSString *) applicationDocumentsDirectory 
{    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}

これで、キャプチャした画像をデータベースに追加するときは、最初に次のようにintDocDirectoryを追加します。

appDelegate = (appDelegate *)[[UIApplication sharedApplication] delegate];
NSString *strDocDirPath = [appDelegate applicationDocumentsDirectory];
NSString *fileName = [NSString stringWithFormat:@"Image%03d.png",appDelegate.counter];
strDocDirPath = [strDocDirPath stringByAppendingPathComponent:fileName];
NSData* imgdata = UIImagePNGRepresentation(yourCapturedImage);
[imgdata writeToFile:strDocDirPath atomically:YES];
appDelegate.counter ++;
[[NSUserDefaults standardUserDefaults] setInteger:appDelegate.counter ForKey:@"ImageNumber"];
//add in database with  fileName 

このように取得します。

 appDelegate = (appDelegate *)[[UIApplication sharedApplication] delegate];
NSString *strDocDirPath = [appDelegate applicationDocumentsDirectory];
strDocDirPath = [strDocDirPath stringByAppendingPathComponent:@"Image001.png"]; //use your database image name here 
 UIImage *img = [[UIImage alloc]initWithContentsOfFile:strDocDirPath];
于 2012-09-24T11:44:37.853 に答える
1

ランダムな文字列を作成し、キャプチャした画像の名前をランダムに生成された文字列に変更できるたびに。

NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";



    NSMutableString *randomString = [NSMutableString stringWithCapacity:6];

    for (int i=0; i<6; i++) 
      {
[randomString appendFormat: @"%C", [letters characterAtIndex: arc4random() % [letters length]]];
        }



NSString *fileName = [NSString stringWithFormat:@"%@.png",randomString];

これがお役に立てば幸いです。

于 2012-09-24T13:33:58.237 に答える