1

同じサイズの 2 つの画像があり、2 番目が 1 番目の上にある 3D 画像を作成する必要があります。次のメソッドで UIImage クラス拡張があります。

+(UIImage*)imageFrom2Images:(UIImage *)img1 with:(UIImage *)img2 {

UIGraphicsBeginImageContext(img1.size);
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);      
[img1 drawAtPoint:CGPointMake(0, 0)];
[img2 drawAtPoint:CGPointMake(0, 0)];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsPopContext();
UIGraphicsEndImageContext();
return resultingImage;

}

結果の画像をフォトアルバムに保存しようとしましたが、エラーが発生して機能しません..この方法は間違っているようです.

   UIImage*t1=[self.mw.imageFIFO lastObject];
   UIImage* test=[UIImage imageFrom2Images:self.imageView.image with:t1];
   UIImageWriteToSavedPhotosAlbum(test, self,
          @selector(image:didFinishSavingWithError:contextInfo:), nil);

私が得ているエラーメッセージは次のとおりです。

 Error Domain=ALAssetsLibraryErrorDomain Code=-3304 "Failed to encode image for saved photos." 
 UserInfo=0x9398960 {NSUnderlyingError=0x935e760 "Failed to encode image for saved photos.", 
 NSLocalizedDescription=Failed to encode image for saved photos.}
4

2 に答える 2

1

現在のグラフィックスコンテキストを取得してからプッシュする必要はありません。コンテキストスタックの最上位を複製しているだけです。それでも機能するのはいいのですが、機能しません。とへの呼び出しを削除するUIGraphicsPushContextUIGraphicsPopContext、意図したとおりに機能します。

+(UIImage*)imageFrom2Images:(UIImage *)img1 with:(UIImage *)img2 {
    UIGraphicsBeginImageContext(img1.size);
    [img1 drawAtPoint:CGPointMake(0, 0)];
    [img2 drawAtPoint:CGPointMake(0, 0)];
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultingImage;
}

今後これらの問題を検出するには、からの出力を確認してくださいimageFrom2Images。最初に実装されたように、それは戻っnilたので、次の呼び出しが何をすべきかを知らなかったのは当然です。(画像オブジェクトが返された場合、次のステップは、UIImageView内に表示して、正しい画像であることを確認することです。)

于 2012-08-21T22:54:02.367 に答える