Hatena::Groupiphone-dev

wadadanetの日記

 | 

2009-03-13つまり杉な自分。。。orz

はやく、解決したことをここに書きたいのに、、、

また詰まっちゃいました。

■したい事

5枚のCGImageを透明度を変えて合成


■CODE

//tmpPhotosArrayには5枚ぐらいのCGImageRefが入っています。

CGSize size = CGSizeMake(320, 420);
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();

for(int i=0; i<kPhotoNumber;i++){
    CGImageRef cImg = (CGImageRef)[tmpPhotosArray objectAtIndex:i];
    [cImg setAlpha:0.1];  //ここでエラー(*エラー1)
    CGContextDrawImage(context, rect, cImg);
    CFRelease(cImg);
}
UIGraphicsEndImageContext();

//ここでContextをUIImageに変換ってのを考え中...

(エラー1)

  • [NSCFType setAlpha:]: unrecognized selector sent to instance 0x13ca90

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFType setAlpha:]: unrecognized selector sent to instance 0x13ca90'


ってな感じになっちゃうんですよ。。。

そもそも、setAlphaつかうのかな。。。

obysobys2009/03/13 16:10UIImageのdrawInRectを使えば透明度を指定して画像を重ねられますよ。

UIImage* img1 = [UIImage imageNamed:@"image1.png"];
UIImage* img2 = [UIImage imageNamed:@"image2.png"];

CGSize size = { 240, 320 };
UIGraphicsBeginImageContext(size);

CGRect rect;
rect.origin = CGPointZero;
rect.size = size;

// レイヤー1 ベースになる画像
[img1 drawInRect:rect];

// レイヤー2 透明度を指定して重ね合わせる
[img2 drawInRect:rect blendMode:kCGBlendModeNormal alpha:0.8];

UIImage* shrinkedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

imageView.image = shrinkedImage;

paellapaella2009/03/13 22:04画像に対して透明度を設定しようとしていますが、画像のデータを変えるのではなく、ビューに対して透明度を設定する、という視点ですよ。
CGImageRefはRefとあるとおりReadOnlyです(確か)。

wadadanetwadadanet2009/03/15 12:50>>obysさん,paellaさん
ありがとうございます!!
解決しました!
CGImageRefってそういう使い方しかできないんですね。
なにやら、勘違いしてたみたいです。

本当にありがとうございました。

 |