頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


png画像を扱う

pngの画像を扱う時にいろいろはまったのでメモ。

Resourcesにあらかじめpng画像を入れておいて、、、
MyViewクラス(UIViewのサブクラス)のdrawRect:メソッド内にて。


【png画像をオブジェクトにする方法】
UIImage *image = [UIImage imageNamed: @"image.png"];

こうでもいいし、

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];

とすればreleaseできるので気分的にすっきりするかな。
ともかく、これでpng画像はUIImageクラスのオブジェクトにできる。

表示して確認しようと勢い余って(?)
[self addSubview:image];
↑こうすると、ビルド時に警告が出て、実行時に落ちた。

よく見れば、UIImageクラスはNSObjectのサブクラス。
そりゃだめだな、ってことで

[image drawAtPoint:CGPointMake(0,0)];

なんてすると、画面に表示してくれる。

[image drawAsPatternInRect:self.bounds];
こんな感じでdrawAsPatternInRect:メソッドを使うと画面にいっぱい並べてくれる。

png画像を並べる

↑ちなみに一つのpng画像はハート型です。
ハートがたくさん並んでもあまりハッピーな気分にはならないな(どうでもいいけど)。


【UIImageViewクラスなんてのもある】
なお、UIImageViewクラスを使って
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self addSubview:imageView];
このようにしても表示してくれる。
imageView.frame.size.widthなどを調べると、png画像と同じサイズのビューを作るみたい。


【マスクしてみる】
マスクを使って画像を切り抜く - 24/7 twenty-four seven

この通りにやってみたけど、マスクしてくれない、、、
仕方ないので自分でpng画像を作るところからやってみた。

いろいろ試した結果、アルファチャンネル付きだとまずいみたい。
そうでなければ、リンク先のコードでマスクはしてくれたけど、なにやらサイズが意図してないものになってる?

どうやら、オリジナルのイメージとマスク用のイメージのサイズが違った場合、マスクして出力される画像のサイズはオリジナルと変わっていない。

自分のやりたいことからすると、こりゃちょっと具合が悪い。


【クロップでいいやん】
要は、png画像から任意の位置、任意のサイズの長方形で画像を取り出したかったので、改めて調べると簡単にクロップできることがわかりました。

The Future is Now: UIImageのクロップの方法(How to crop a UIImage)

CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
UIImage *cropped =[UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);

↑リンク先にあるコードだけど、CGImageReleaseなんてのがあるのかー!
UIImageのオブジェクトにしたら、こうやってリリースするのがお作法みたい。
スポンサーサイト

<< どちらのクロップが速いか調べてみた  TopPage  知らなくてはまった!loadViewが呼ばれるタイミング >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/452-34c32ed2




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad