2011-06-20 16 views
0

私はユーザーが写真を撮ったり、すでにデバイス上にあるものを選択したりして、画像にオーバーレイを配置するというアプリを作っています。iPhone SDK:ある画像を別の画像に保存する際に問題が発生する

ユーザーがオーバーレイを選択して配置した後で、オーバーレイのサイズが変更された後、xとyの値が正しいように見えるので、別のものを除いて、

それで、これは私が(ユーザーの写真が「画像」)オーバーレイを追加するために使用するコードです:

​​

が、これは結果の画像保存に使用するコードです:

UIGraphicsBeginImageContext(image.image.size); 

// Draw the users photo 
[image.image drawInRect:CGRectMake(0, 0, image.image.size.width, image.image.size.height)]; 

// Draw the overlay 
float xx = (overlay.center.x); 
float yy = (overlay.center.y); 

CGRect aaFrame = overlay.frame; 
float width = aaFrame.size.width; 
float height = aaFrame.size.height; 


[overlay.image drawInRect:CGRectMake(xx, yy, width, height)]; 
    UIGraphicsEndImageContext(); 

助けが必要ですか?ありがとう

答えて

2

問題は、画像ビューのフレームサイズではなく、画像のサイズを使用していることです。イメージはイメージビューよりもはるかに大きいように見えるので、イメージのサイズを使用すると、他のイメージのサイズは、それがまだ正しいサイズであるにもかかわらず、はるかに小さくなります。上記の方法は解像度の損失につながる一方でその適切な解像度で親画像を描画しようとしている、品質

の損失を回避

UIGraphicsBeginImageContext(image.frame.size); 

// Draw the users photo 
[image.image drawInRect:CGRectMake(0, 0, image.frame.size.width, image.frame.size.height)]; 
[overlay.image drawInRect:overlay.frame]; 

UIImage * resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

が不要な影響を与える可能性があります - あなたはこれまで、あなたのスニペットを変更することができますそのオーバレイが高解像度ではない場合、それは伸縮性で終わることができます。

float verticalScale = image.image.size.height/image.frame.size.height; 
float horizontalScale = image.image.size.width/image.frame.size.width; 

CGRect overlayFrame = overlay.frame; 
overlayFrame.origin.x *= horizontalScale; 
overlayFrame.origin.y *= verticalScale; 
overlayFrame.size.width *= horizontalScale; 
overlayFrame.size.height *= verticalScale; 

UIGraphicsBeginImageContext(image.image.size); 

// Draw the users photo 
[image.image drawInRect:CGRectMake(0, 0, image.image.size.width, image.image.size.height)]; 
[overlay.image drawInRect:overlayFrame]; 

UIImage * resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 
+0

おかげで、これは本当によく動作しますが、それは品質の損失についての恥だ - あなたは親画像の解像度でそれを描画するために、このコードを試すことができますが(未テスト、問題が発生した場合、私に知らせて)。私が.frameよりむしろ.imageのアプローチに行った理由の1つは、画像の真の解像度を維持するということです。オーバーレイをサブビューとして追加する別の方法はありますか?そのサブビューで実際のサイズを表していますか? – Sam

+0

@Jessica、あなたの要件に合ったコードを追加しました。それはテストされていません。それが動作するかどうか確認できますか? –

+0

遅れて申し訳ありません。私はちょうどそれをテストし、それは幻想的に動作します、あなたの助けをありがとう! – Sam

関連する問題