December 16, 2009

iPhone กับการเขียนและอ่านไฟล์รูปใน document directory

December 15, 2009

ใช้ iPhone ถ่ายรูปแล้ว Save ลงเครื่อง

การเขียนโปรแกรมใน iPhone ให้ถ่ายรูป และบันทึก (Save) รูปนั้นไว้ในเครื่องนั้นสามารถทำได้ง่ายๆผ่าน UIImagePickerController เท่านั้น กระบวนท่ามีดังนี้

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;

picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;


[self presentModalViewController:picker animated:YES];

[picker release];

สร้าง object ของ UIImagePickerController ออกมา จากนั้นกำหนด delegate ให้มัน และแสดง picker ออกมาผ่าน modal view เท่านั้นเอง ซึ่งระหว่างก่อนที่จะแสดง picker ขึ้นมานั้น จะเห็นว่ามี 2 จุดที่เราต้องทำอะไรบางอย่างได้แก่จุดแรก

picker.allowsEditing = YES;

เป็นการบอกว่าหลังจากถ่ายรูปเสร็จแล้ว จะให้มีการแก้ไขรูปต่อหรือเปล่า เช่นการย่อ ขยาย เป็นต้น
และจุดที่สองคือ

picker.sourceType = UIImagePickerControllerSourceTypeCamera;

เป็นการ กำหนดแหล่งที่มาของรูป จากตัวอย่างเป็นการกำหนดแหล่งที่มาของรูปคือ กล้องนั่นเอง ซึ่งนอกจากกำหนดแหล่งที่มาเป็นกล้องได้แล้ว เรายังกำหนดแหล่งที่มาได้อีก 2 แบบ ที่เป็นการเลือกรูปจากในเครื่องของเราเอง ได้แก่

UIImagePickerControllerSourceTypePhotoLibrary
UIImagePickerControllerSourceTypeSavedPhotosAlbum


จากนั้นอย่าลืม implement delegate method ของ picker ด้วย ดังนี้
- (void)imagePickerController:(UIImagePickerController *)picker 
     didFinishPickingImage:(UIImage *)image
     editingInfo:(NSDictionary *)editingInfo {
  
   UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), self);
   

[picker dismissModalViewControllerAnimated:YES];


}

หลัง จากเราเลือก รูปเสร็จแล้ว (รวมถึงการถ่ายรูปเสร็จแล้วด้วย) method นี้จะทำงานทันที เราจะได้ reference ของ image จากนั้นก็ทำการ save ทันที โดยกำหนด selector ให้ทำงานหลังจากการ save เสร็จสิ้นไว้ด้วย หน้าตาดังนี้

- (void) image: (UIImage*) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo{
NSString *str = @"Saved";

   UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Saved." message:str delegate:self cancelButtonTitle:nil otherButtonTitles: @"OK", nil];

   [alert show];


   NSLog(@"error = %@", error);

}

และอีก 1 delegate method ที่จะทำงานเมื่อเรายกเลิกการเลือกรูป ดังนี้

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

   [picker dismissModalViewControllerAnimated:YES];

}

เท่านี้ก็เรียบร้อย

UPDATE:
ยัง ไม่เรียบร้อย สิ่งที่ควรเพิ่มเข้ามาสำหรับ application ที่ต้องใช้/สามารถใช้กล้องถ่ายรูปได้ก็คือการตรวจสอบว่าอุปกรณ์ที่ application ทำงานอยู่นั้นมี resource อยู่จริงหรือไม่ เช่นมี photo library หรือมีกล้องพร้อมใช้งานไหม โดยใช้ class method ของ UIImagePickerController ชื่อ isSourceTypeAvailable ดังนี้

if (![UIImagePickerController isSourceTypeAvailable:
  UIImagePickerControllerSourceTypeCamera]) {

   // do something

}


เท่านี้ก็เรียบร้อย

เปลี่ยน view โดยไม่ใช้ modal view

November 11, 2009

ใช้ MGTwitterEngine ทำ twitter client บน iPhone

November 09, 2009

ใช้ Hex value กำหนดค่าสีให้ UIColor

October 29, 2009

เปลี่ยนไปแสดงหน้า view อื่นด้วย modal view

October 28, 2009

แทนที่อักขระพิเศษที่จะใช้ใน URL

แทนที่ Keyboard ด้วย Date Picker (จบ)

แทนที่ Keyboard ด้วย Date Picker

September 09, 2009

Stone (40,000 B.C.) VS iPhone 3G (2008)

August 11, 2009

VMWare ซื้อ SpringSource

July 11, 2009

SIT16 First Meeting

June 22, 2009

Hello World! - Your First Application in Grails and Flex

แปะรูปใน Wikimapia

June 05, 2009

10 เหตุผลที่คนในวงการไอทีลาออก (เขาว่า)

June 02, 2009

"บน บน ล่าง ล่าง ซ้าย ขวา ซ้าย ขวา บี เอ" บน Google Reader

May 30, 2009

I am 50% Left Brained, 50% Right Brained

May 22, 2009

ถึงแจกฟรีก็กำไรดีได้ : ตัวอย่างโมเดลธุรกิจที่ใช้ครีเอทีฟคอมมอนส์

April 17, 2009

ไข่สุกที่น้ำพุร้อนแม่กระจาน จังหวัดเชียงราย

April 16, 2009

น้ำตกภูซาง จ.เชียงราย

April 11, 2009

งมหาปลาในสระกลางทุ่งนา

ไปถ่ายรูปกิจกรรม งมหาปลาในสระน้ำกลางทุ่งนาที่จังหวัดพะเยา อากาศร้อนมาก ลมแทบไม่พัด นานแล้วที่ผมไม่ได้มากลางทุ่งนาแบบนี้ นานซะจนแทบลืมบรรยากาศ กลิ่นไอดิน กลิ่นน้ำในนาไปเลยทีเดียว

เริ่มจากต้องสูบน้ำออกจากสระให้แห้งๆซะก่อนจะได้งมหาได้ง่ายๆ

ใช้รถไถช่วยปั่นเป็นแรงให้เครื่องสูบน้ำ สูบน้ำออกจากสระน้ำให้


ได้ปลาแล้วก็ขนขึ้นไปเก็บไว้บนขอบสระเป็นช่วงๆ

เก็บปลาไว้ในนี้ก่อน


สภาพคนที่ลงไปงมหาปลาในสระ เละไปด้วยโคลน

ปลาส่วนหนึ่งถูกขนกลับไปเก็บไว้ที่่บ้านก่อน

ปลาอีกส่วนหนึ่งซวย ที่โดนชำแหละกินก่อนที่ริมสระ
http://www.flickr.com/photos/khomkrit/3432183644
สภาพปลาที่โดนชำแหละเรียบร้อย เตรียมเอามาทำกิน

April 05, 2009

ลืม username/password สำหรับใช้อินเทอร์เน็ตของ true

April 01, 2009

แก้ไขรูปของ Grails - RichUI Plugin Star Rating

ใช้อินเทอร์เน็ตใน Mac กับ Nokia N70 Music Express ผ่าน Bluetooth

March 09, 2009

ทำให้ Mac มองเห็น Samsung D900i เป็น USB Drive Mass Storage

ใช้ Nokia N70 Music กับ Mac OS X Leopard