1. 程式人生 > >將圖片儲存到Documents資料夾裡

將圖片儲存到Documents資料夾裡

// 裝置的圖片庫 所有同步到iphone的影象 以及包括使用者拍攝的圖片在內的任何相簿
//UIImagePickerControllerSourceTypeSavedPhotosAlbum 僅含相簿
//UIImagePickerControllerSourceTypeCamera 允許使用者使用iPhone內建的攝像頭拍照

#define SOURCETYPE UIImagePickerControllerSourceTypePhotoLibrary 

#define DOCSFOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]

- (id) init
{
	if (!(self = [super init])) return self;
	
	// Attempt to use a Photo Library browser     嘗試使用一個圖片庫瀏覽器
    
	if ([UIImagePickerController isSourceTypeAvailable:SOURCETYPE])	
        
        self.sourceType = SOURCETYPE;//isSourceTypeAvailable 檢查制定源是否可用
    
	self.delegate = self;
    
	return self;
}
//下面的這個函式是將檔案儲存到資料夾裡

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:
                            (UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
	//找到一個獨特的路徑名稱,一個空的檔案
    //stringByAppendingPathComponent 從頂層資料夾中載入一個名為selectedImage.png 的檔案
    
	int i = 0;
    
	NSString *uniquePath = [DOCSFOLDER stringByAppendingPathComponent:@"selectedImage.png"];
                                                              
	while ([[NSFileManager defaultManager] fileExistsAtPath:uniquePath])
        
      uniquePath = [NSString stringWithFormat:@"%@/%@-%d.%@", DOCSFOLDER, 
                                              @"selectedImage", ++i, @"png"];
	
	printf("Writing selected image to Documents folder\n");
    
	[UIImagePNGRepresentation(image)  writeToFile: uniquePath atomically:YES];
    
    //UIImageJPEGRepresentation 帶有兩個引數 影象和範圍0.0(最大壓縮)到1.0(最小壓縮) 
    
    //而UIImagePNGRepresentation後面僅代有一個影象  
    
    //要將一個圖片寫到一個檔案上用writeToFile:atomically:這可將圖片存出到指定的目錄下將第二個引數
    
    //設為YES確保整個資料夾在被放到目錄中之前獲得寫操作 保證你不必處理部分寫操作帶來的後果       
    
    //每個UIImage都可將自身轉化為JPEG後PNG資料 這兩個內建UIKit函式從UIImage例項生成必需的NSData
    
	[self popToRootViewControllerAnimated:YES];
    
   //[self setNavigationBarHidden:YES animated:YES]; 
    
   // 剛開始的時候顯示 點選圖片返回後沒有了導航欄
    
    /*pushViewController:viewController animated:BOOL
     
     (載入檢視控制器)– 新增指定的檢視控制器並予以顯示,後接:是否動畫顯示

      popViewControllerAnimated:BOOL
     
     (彈出當前檢視控制器)– 彈出並向左顯示前一個檢視
    
      popToViewController:viewController animated:BOOL  
     
     (彈出到指定檢視控制器)– 回到指定檢視控制器, 也就是不只彈出一個
    
      popToRootViewControllerAnimated:BOOL
     
     (彈出到根檢視控制器)– 比如說你有一個“Home”鍵,也許就會實施這個方法了.回到根檢視控制器那裡
    
      setNavigationBarHidden:BOOL animated:BOOL
     
     (設定導航欄是否顯示)– 如果你想隱藏導航欄,這就是地方了。參照Picasa的WebApp樣式*/
    
}

//點選cancel健時 要引發的事件
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
	printf("User cancelled\n");
	[self popToRootViewControllerAnimated:YES]; 
}

如果把上面兩個函式中的的[self popToRootViewControllerAnimated:YES];  改為[[self parentViewController]

 dismissModalViewControllerAnimated:YES];

則使用者就可以選擇編輯影象啦  再有下面的這兩個函式

- (void) snap
{
	[self presentModalViewController:[[HelloController alloc] init] animated:YES];
}

- (void) loadView
{
	[super loadView];
	
	UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
	contentView.backgroundColor = [UIColor whiteColor];
	self.view = contentView;
	[contentView release];
	
	self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
					initWithTitle:@"Select" 
						style:UIBarButtonItemStylePlain 
					       target:self 
					       action:@selector(snap)] autorelease];
    self.title = @"Image Picker";
}