KToo -7ページ目

ちょいきゅうけい

最大の山こえたとこ
けっこーはまった
あともうひとつの山がある
めんどいだけな感じで
さっきの山よりまし
腰重しなのできゅうけいなう
とりま
その山直前までいきたいっす
いま
ほかんとこ
微調整中
でも
画像処理おもろー
ま、ちょー簡単な処理しかやってねーけど
アイコンもつくんねーとなあ
DTPやってるけど
アイコンデザイン能力ゼロなのが
かなしいっす

よしおくん

ぎょぎょ
































ぎょぎょぎょー

さかなくん

ぎょぎょ
































ぎょぎょぎょー

むしめがね2

めがね実装でけた
マスクPNGは白と黒にする
透明にしちゃったら
そこも画像うつっちったので
白にしたらめがね内に
拡大画像がおさまった
あと
大きさもかえた
画像の外にいったら
めがねがきえて
中に入ったら
めがねふっかつ
※めがね出現と消滅を
 タッチ系のコード内に追加)
これですっきり
でも
コードが
すげー
ぐちゃぐちゃ
メモリリークも
対策せなあかん
いろいろ
やらねばならないこと
ありまくり
とりあえず
きょうはここまで
さきなげー
はやくつくりおえてー

むしめがね

仕事の合間に
http://www.craftymind.com/2009/02/10/creating-the-loupe-or-magnifying-glass-effect-on-the-iphone/
で勉強

1)
CGImageRef subImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(touchPoint.x-18, touchPoint.y-18, 36, 36));
CGImageRef xMaskedImage = CGImageCreateWithMask(subImage, mask);

マスクすると
subImage(36X36)

mask(85X85)
の大きさに拡大される様子
参考(http://stackoverflow.com/questions/1326571/cgimageref-resize-without-scaling)
なので
CGImageCreateWithImageInRectで
拡大率を調節する

2)
CGContextDrawImage(context, area2, xMaskedImage);
CGContextDrawImage(context, area, overlay);

http://iphone-dev.g.hatena.ne.jp/Isoparametric/20080902/1220311874
によると
CGContextDrawImageすると
Quartzの仕様により
原点が左下になって
上下逆さにレンダリングされるらしー

なので
GAffineTransform xform = CGAffineTransformMake(1.0, 0.0,0.0, -1.0,0.0, 0.0);
CGContextConcatCTM(context, xform);
CGRect area = CGRectMake(touchPoint.x-42, -touchPoint.y, 85, 85);
CGRect area2 = CGRectMake(touchPoint.x-40, -touchPoint.y+2, 80, 80);
でアフィン変換で逆さにしてる様子

3)
HPのコードではメモリリークあるので
最後に
CGImageRelease(mask);
CGImageRelease(subImage);
CGImageRelease(xMaskedImage);
追加する

CGImageMaskCreateや
CGImageCreateWithImageInRectや
CGImageCreateWithMask
などCreate文で作ったものは解放する必要あり
参考(http://d.hatena.ne.jp/masatoshisw20/20081220/1229727292)


アフィン変換
//引数
// a b 0
// c d 0
// e f 1
CGAffineTransformMake(a, b, c, d, e, f);

//平行移動 (下記行列のx, yを指定する)
// 1 0 0
// 0 1 0
// x y 1
CGAffineTransform translate2 = CGAffineTransformMake(1.0, 0.0, 0.0, 1.0, 100.0, 100.0);
[btn setTransform:translate2];

//スケール (下記行列のx, yを指定する)
// x 0 0
// 0 y 0
// 0 0 1
CGAffineTransform scale2 = CGAffineTransformMake(2.0, 0.0, 0.0, 2.0, 0.0, 0.0);
[btn setTransform:scale2];

//回転 (下記行列のsin, cosを指定する)
// cosA sinA 0
//-sinA cosA 0
// 0 0 1
float rd = 90.0f * (M_PI / 180.0f);
CGAffineTransform rotate2 = CGAffineTransformMake(cos(rd), sin(rd), -sin(rd), cos(rd), 0.0, 0.0);
[btn setTransform:rotate2];

http://d.hatena.ne.jp/ntaku/20090226/1235659545より抜粋
参考(http://ipr20.cs.ehime-u.ac.jp/column/gazo_syori/chapter3.html)