頭と尻尾はくれてやる!

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


どちらのクロップが速いか調べてみた

iPhone SDK開発のレシピ

iPhone SDK開発のレシピ

価格:2,520円(税込、送料別)


↑この前この本を買ったのですが、ここに画像の切り取り(クロップ)の方法が載っていました(レシピ57)。

頭と尻尾はくれてやる! png画像を扱う
ここの記事で示した方法と違ったので、どっちがいいのかなあ?
と気になったのでどちらが速いのか簡単に調べてみました。

コードの共通部分はこんな感じ。↓
UIImage *image = [UIImage imageNamed: @"ryomaden.png"];
CGSize size = CGSizeMake(150, 150);//150×150ピクセルの画像を作る
UIImage *resultImage;//ここにアウトプットの画像が入る

//計測対象部分

[resultImage drawAtPoint:CGPointMake(10,10)];//画像を表示

で、それぞれのコードはこんな感じです。↓

(1)最初に見た方法
CGRect croppingRect = CGRectMake(240, 0, size.width, size.height);
CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, croppingRect);
resultImage =[UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
(2)「iPhoneSDK 開発のレシピ」で見た方法
UIGraphicsBeginImageContext(size);
[image drawAtPoint:CGPointMake(-240, 0)];
resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
↓ちなみに元画像がこれ。

元の画像

↓出力はこんなのになります。

クロップ後の画像

なぜこの画像?とか深く考えないでください、深い意味はありません。

さて、結果。
実機(3GS、iOS4.1)で各3回ずつですが、比べてみると、、、
(1)が0.09msecくらい。
(2)が53msecくらい。
なんと、全然違うじゃないか~!

(2)はどこで時間食ってるのかな?と思って調べると
[image drawAtPoint:CGPointMake(-240, 0)];
↑ほとんどここでした、、、

どこにdrawしてるのか知らないけど(画面に表示されるわけでもないのに)時間がかかる処理なんだな。

ともかく、クロップは(1)のCGImageRefを使う方法ですることにしようっと。

<< タブ間でデータを共有する  TopPage  png画像を扱う >>

コメント


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

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/453-15c0c14d




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

FC2Ad