0

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)];

しかし、画像は依然として画面よりも大きく拡大されています。

4

1 に答える 1

1

インターフェイスビルダーでimageviewのプロパティをaspectfitに設定できます。これは役立つはずです。または、プログラミングによってimageView.contentMode = UIViewContentModeScaleAspectFit;

于 2011-06-27T09:34:27.800 に答える