これはすでに尋ねられた質問ですが、どこにも見つからず、理解できない問題に直面しています。
私の目標は単純です。背景画像を描画し、その上に透明な画像を描画します。一番上の画像の透明度が弱い最初はうまく機能しますが、一番上の画像がほとんど透明になるとすぐに、結果の画像に奇妙な色が表示されます。
これが元の画像です: 元の画像 http://img406.imageshack.us/img406/7452/bidou.jpg
これが私が段階的に透明にする画像です: マスクhttp://img515.imageshack.us/img515/4464/loltest31.png(描画時にサイズを変更します。問題が発生した場合に備えて、元のサイズにしようとしました補間などから来ましたが、問題は解決しませんでした...)
そして今、いくらかの透明度を持つマスク: マスクのステップ 4 http://img19.imageshack.us/img19/3791/loltest4.png
そして最後の結果は、マスクの透明度 (カラー データは変更せず、アルファ値のみを変更する) がほぼ完成したときです (アルファ = 7 (0 から 255 までのスケール)):
ご覧のとおり、帽子の上の赤い点のように、結果に奇妙な色が表示され、透明度がどこでも同じレベルにあるようには見えません (マスクを保存して確認したためです)。 )。さらに、元の画像を変更せず、常に最初に描画したとしても、結果の画像の一部のゾーンは完全に透明になります。
マスクが完全に透明な場合、結果は元の画像と同じになりますが、アルファが 0 でなくなるとすぐに、それらの奇妙な色のピクセルが作成されます。
さまざまなブレンド モードを試しましたが、成功しませんでした。
コードで行う方法の1つを次に示します。
UIImage *bottomImage = self.originalImage;
UIImage *image = [self getUIImage];
CGSize newSize = mySize;
UIGraphicsBeginImageContext( newSize );
// Use existing opacity as is
[bottomImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
// Apply supplied opacity if applicable
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
そしてもう1つの方法(最終的には同じです):
CGSize mySize = self.originalImage.size;
UIGraphicsBeginImageContextWithOptions(mySize, YES, 0);
CGContextRef globalContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(globalContext);
CGContextSetBlendMode(globalContext, kCGBlendModeNormal);
CGContextDrawImage(globalContext, CGRectMake(0, 0, mySize.width, mySize.height), self.originalImage.CGImage);
CGContextDrawImage(globalContext, CGRectMake(0, 0, mySize.width, mySize.height), [self getUIImage].CGImage);
CGImageRef resultRef = CGBitmapContextCreateImage(globalContext);
UIImage* resultImage = [UIImage imageWithCGImage:resultRef];
CGContextRestoreGState(globalContext);
UIGraphicsEndImageContext();
誰か、何か考えはありますか?試したことのないものは考えられません...
編集:単純な4 * 2画像の結果:
Empty:
0: 0; 0; 0; 16
1: 0; 0; 0; 16
2: 0; 0; 0; 0
3: 0; 0; 0; 0
4: 0; 0; 0; 0
5: 0; 0; 0; 0
6: 0; 0; 0; 0
7: 0; 0; 0; 0
Bottom drawn:
0: 0; 0; 0; 255
1: 128; 0; 0; 255
2: 128; 128; 0; 255
3: 0; 128; 0; 255
4: 0; 128; 128; 255
5: 0; 0; 128; 255
6: 128; 0; 128; 255
7: 128; 128; 128; 255
foreground:
0: 0; 0; 0; 7
1: 128; 0; 0; 7
2: 128; 128; 0; 7
3: 0; 128; 0; 7
4: 0; 128; 128; 7
5: 0; 0; 128; 7
6: 128; 0; 128; 7
7: 128; 128; 128; 7
front drawn:
0: 0; 0; 0; 255
1: 0; 128; 128; 192
2: 128; 128; 0; 0
3: 0; 128; 0; 255
4: 0; 128; 128; 255
5: 0; 0; 128; 255
6: 128; 0; 128; 0