2

(360,480) の画像を (320,480) にスケーリングし、画像をトリミングするアプリケーションがあります。正常に動作していますが、画像を取得すると、少しズームされたタイプの画像が前面に投影されます。これが私がやっている方法です。

[self imageWithImage:(UIImage *)image scaledToSize:CGSizeMake(160.0f,240.0f)];

そして私の定義は -

-(UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    //UIGraphicsBeginImageContext(newSize);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();

    [self cropimage:newImage];
    return newImage;
}

そしてcropimageで私はこのようにやっています -

-(void)cropimage:(UIImage *)image
{

   CGRect cropRect = CGRectMake(20,100,280,200);
     CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect);
    UIImage* croppedImage = [UIImage imageWithCGImage:imageRef];
         CGImageRelease(imageRef);

    NSData *pictureData = [NSData dataWithData:UIImagePNGRepresentation(croppedImage)];
}

誰かが私のアプローチで何が間違っているかを知ることができますか?

4

1 に答える 1

0

スケールに 0.0 の代わりに image.scale を渡して、渡されたイメージ スケールを強制的に使用するようにしてください。

-(UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    //UIGraphicsBeginImageContext(newSize);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, image.scale);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();

    [self cropimage:newImage];
    return newImage;
}
于 2013-06-14T17:52:24.127 に答える