-1

バックグラウンドにUIViewがあり、フォアグラウンドにUIImageViewがある単純な描画アプリケーションを作成しています。UIViewで描画作業を行っており、UIImageViewで画像を設定しました。UIImageViewに透明効果を追加して、画像の背後に線を表示したいと思います。アルファを減らすことでこれができることはわかっていますが、画像のアルファを変更したくありません。

でやりたいのですがCGContextSetBlendMode、どうしたらいいのかわかりません。この問題の解決にご協力ください。

ありがとう!

画像 http://www.freeimagehosting.net/q3237

UIImage *img = [UIImage imageNamed:@"Image.png"];      

UIGraphicsBeginImageContext(self.view.frame.size); 
CGContextRef ctx = UIGraphicsGetCurrentContext(); 
CGContextSetBlendMode(ctx, kCGBlendModeMultiply); 
[img drawInRect:CGRectMake(0, 0, 768, 1004) blendMode:kCGBlendModeDarken alpha:1]; [imageView.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)]; 
CGContextSetBlendMode(ctx, kCGBlendModeDarken); 
imageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
4

1 に答える 1

1

imageviewをこのように維持する必要はありません。2つの異なるコンテキストで描画しているため、それらの間でブレンドモードを使用することはできません。そのためには、描画ビューに他のものを描画してから、画像を描画する必要があります。

  - (void)drawRect:(CGRect)rect {

         // do ur drawing stuff first             

            CGContextRef context = UIGraphicsGetCurrentContext();
            CGContextTranslateCTM(context, 0, self.bounds.size.height);
            CGContextScaleCTM(context, 1.0, -1.0);
            CGContextDrawImage(context, self.bounds, self.image.CGImage);
            CGContextSetBlendMode(context, kCGBlendModeSaturation);
            CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
            CGContextFillRect(context, rect);  
  }
于 2012-08-03T10:12:49.563 に答える