UIImagePickerControllerSourceTypePhotoLibrary でユーザーに画像を選択してもらいます。
次に、編集した画像を取得し、オーバーレイを適用してから、PostPictureViewController に渡して表示する次のメソッドがあります。ディスプレイでは、画像を元の縦横比を維持し、画面に合わせたいと考えています。
4.3 sdk を使用するシミュレーターでは正常に動作しますが、iPhone 4 Retina ディスプレイ画面に配置すると、画像が左上隅にズームされ、画像の 1/4 のみが全画面表示され、元の縦横比が取り除かれます。 !
シミュレーターで動作するように、これを画面に合わせて縮小するにはどうすればよいですか?
また、オーバーレイを完全に削除して、元の画像と編集した画像を表示するようにしましたが、それでも元のアスペクト比は維持されません!!!
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// Access the cropped image from info dictionary
image = [info objectForKey:@"UIImagePickerControllerEditedImage"];
// Combine image with overlay before saving!!
image = [self addOverlayToImage:image];
overlayGraphicView.image = nil;
// Take the picture image to the post picture view controller
postPictureView = [[PostPictureViewController alloc] init:image];
[picker pushViewController:postPictureView animated:YES];
[picker release],picker = nil;
}
これが私のオーバーレイ画像の追加機能です:
- (UIImage*) addOverlayToImage:(UIImage*)originalImage
{
//CGRect cgRect =[[UIScreen mainScreen] bounds];
CGSize size = originalImage.size;
if (UIGraphicsBeginImageContextWithOptions != NULL) {
// Use for iPhone 4 Retina
UIGraphicsBeginImageContextWithOptions(size, YES, 0.0);
} else {
UIGraphicsBeginImageContext(size);
}
UIImage* overlayImage = [UIImage imageNamed:overlayGraphicName];
[originalImage drawAtPoint:CGPointMake(0,0)];
[(UIImage *)overlayImage drawAtPoint:CGPointMake(0,(originalImage.size.height/2 - overlayImage.size.height/2) + 20)];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
[finalImage retain];
UIGraphicsEndImageContext();
return finalImage;
}
最後に、PostPictureViewController で、viewdidload に画像を表示します。
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor blackColor]];
// Load the picker image for viewing
UIImageView *pickerView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320, 480)];
[pickerView setImage:pickerImage];
pickerView.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:pickerView];
[pickerView release],pickerView=nil;
}
画像を表示するためのこのviewdidloadメソッドでは、これを行うと:
UIImageView *pickerView = [[UIImageView alloc] initWithImage:pickerImage];
次に、画像はシミュレータ上で垂直方向に画面の中央に配置されず、0,0 から始まります。実際には、CGRectMake でフレームの幅と高さを定義すると、画面の中央に配置されます。
明らかに、iPhone 4 の場合、これも変更しようとしました。
UIImageView *pickerView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 640, 960)];
しかし、画像は依然として画面よりも大きく拡大されています。