0

スクリーンショット用に 2 つの画像を 1 つに結合しようとしています。コードは次のとおりです。

- (void)savePhoto:(id)sender
   UIImage *snapShotImageGL1 = [glView snapUIImage];
   UIImage *maskedImage = [self maskImage:_image withMask:snapShotImageGL1];
   UIImageWriteToSavedPhotosAlbum(maskedImage, nil, nil, nil);
}

その後:

#pragma mark - Image Processing

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {

   UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
   [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
   UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return newImage;
}

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

CGImageRef maskRef = maskImage.CGImage;

CGImageRef mask =  CGImageMaskCreate(CGImageGetWidth(maskRef),
                                    CGImageGetHeight(maskRef),
                                    CGImageGetBitsPerComponent(maskRef),
                                    CGImageGetBitsPerPixel(maskRef),
                                    CGImageGetBytesPerRow(maskRef),
                                    CGImageGetDataProvider(maskRef), NULL, false);

CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];

}

-(UIImage*)invertImage:(UIImage*)image{

    UIGraphicsBeginImageContext(image.size);
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
    [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDifference);
    CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),[UIColor  
    whiteColor].CGColor);
    CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width,   
    image.size.height));
    UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return returnImage;
}

これはシミュレーターではうまく機能していますが、デバイスで実行すると白い空白の写真が作成されるだけです。ここで私が間違っていることについて何か考えはありますか?

4

1 に答える 1

1

バンドル内のイメージ名を確認してください。ファイルが大文字と小文字を区別するかどうかはシミュレータでは考慮されませんが、デバイスでは区別されるためです。

イメージ名が"ConverImage.png"の場合、シミュレーターでは正常に機能しますが、デバイスでは機能しません。そのファイル名を に変更してみてください"convertimage.png"

于 2012-12-04T06:56:51.903 に答える