Hatena::Groupiphone-dev

神様なんて信じないんだからね! このページをアンテナに追加 RSSフィード

2008-09-04

画像サイズもとれる(当たり前

09:23 | 画像サイズもとれる(当たり前 - 神様なんて信じないんだからね! を含むブックマーク はてなブックマーク - 画像サイズもとれる(当たり前 - 神様なんて信じないんだからね! 画像サイズもとれる(当たり前 - 神様なんて信じないんだからね! のブックマークコメント

CGImageGetWidth(image);

CGImageGetHeight(image);

[image size].width;

[image size].height;

になるのは喜ばしいことだ。

UIImage が描画するコンテキスト

09:19 | UIImage が描画するコンテキスト - 神様なんて信じないんだからね! を含むブックマーク はてなブックマーク - UIImage が描画するコンテキスト - 神様なんて信じないんだからね! UIImage が描画するコンテキスト - 神様なんて信じないんだからね! のブックマークコメント

は、要するにカレントのものなのかな?

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

にはコンテキストを指定しないため、

そうなんじゃないかなぁ、という理解のままだが、

もう少し描いていけばわかるようになるだろう。

少なくとも

CGContextStrokeRect

などで描いたラインとの前後関係は発生するので、

理解は間違っていないという方向で進める。

UIImageのdraw系

| 08:34 | UIImageのdraw系 - 神様なんて信じないんだからね! を含むブックマーク はてなブックマーク - UIImageのdraw系 - 神様なんて信じないんだからね! UIImageのdraw系 - 神様なんて信じないんだからね! のブックマークコメント

id:jorakuraさんに教えていただいた通り、早速試してみた。

今まで、

CGImageRef background;
...
background = CGImageRetain([UIImage imageNamed:@"bg.png"].CGImage);
...
CGContextDrawImage(context, rect, background);

としていたものを、

UIImage* background;
...
background = [UIImage imageNamed:@"bg.png"];
...
[background drawAtPoint:CGPointMake(0,0)];

としたら、うまくいったよー!!!

すばらしー!

ついでに、pointの指定も正常化されていて、

CGPointMake(0,100);

とすると、座標系としては左上が原点として扱われるみたい。

すごい!

すごい!

ちなみにdrawInRectは、拡大縮小になる。

StretchBltみたいなもん。

LachesisLachesis2008/09/16 18:47TranslateやScaleを処理してもCGContextDrawImageの方が描画処理は速いようです。
32×32のgif画像を画面に150枚描画した時、CGContextDrawImageではギリギリ30fps出てましたが、
drawAtPointの場合は24fps(低い時は21fpsまで低下)でした。

あと、CGContextDrawImageだと画像内の一部分だけを切り抜く事が出来るので、ゲーム開発の際に
はCGContextDrawImageを使う方が良さそうです。

まぁQuartzで描画するよりもOpenGLで描画する方がもっと速いですが・・・

IsoparametricIsoparametric2008/09/17 09:19コメントありがとうございます。
なるほど……。
元々、タイマを使って処理を重くするとタッチイベントが起きなくなったり、
フレームレートが安定しない感じなので、
それは重要ですね。ありがとうございます。

そして、OpenGLは確かに……。
多忙にて触れていないのですが、
GLに乗り換えようか思案中です。

助かります。

2008-09-02

MOSAのドキュメントお勧め

| 08:35 | MOSAのドキュメントお勧め - 神様なんて信じないんだからね! を含むブックマーク はてなブックマーク - MOSAのドキュメントお勧め - 神様なんて信じないんだからね! MOSAのドキュメントお勧め - 神様なんて信じないんだからね! のブックマークコメント

MOSAのテクニカルドキュメントが良さそう。

http://www.mosa.gr.jp/?page_id=19

普通のOSX向けのものだが、

Cocoaに対するグラフィックやテキスト周り、

OpenGL周りのテキストとしては良い感じなり。

QuartzでのCGContextDrawImage

| 08:31 | QuartzでのCGContextDrawImage - 神様なんて信じないんだからね! を含むブックマーク はてなブックマーク - QuartzでのCGContextDrawImage - 神様なんて信じないんだからね! QuartzでのCGContextDrawImage - 神様なんて信じないんだからね! のブックマークコメント

普通に

CGContextDrawImage

をしようとすると、

Quartzの仕様により、

原点がディスプレイの左下になり、

そこからImageが表示されるため、上下逆さにレンダリングされる。

で勢い余って

CGContextScaleCTM(context, 1, -1);

を呼ぶと反転は直るが、y軸が−方向に逆転してしまう。

そこでCGContextTranslateCTMを使うとy座標が移動(ではないがtranslate)する。

本来、-heightに描かないといけなかったものが

translateの作用によって、height分移動するので、0に描くことができる。

		CGFloat width = CGImageGetWidth(background);
		CGFloat height = CGImageGetHeight(background);
		CGContextSaveGState(context);
	        CGContextTranslateCTM(context, 0, height);
		CGContextScaleCTM(context, 1, -1);
		CGRect rect;
		rect.origin = CGPointMake(0,0);
		rect.size = CGSizeMake(width, height);
		CGContextDrawImage(context, rect, background);
		CGContextRestoreGState(context);

しかし、別に原点が左上になったわけではないので、

yに正の値を与えると、ディスプレイの上に対して移動する。

yに負の値を与えると、ディスプレイの下に対して移動する。

座標系を綺麗にしたいんだが、どうすりゃいいかねえ。

Quartz で状態のPushとPop

| 08:21 | Quartz で状態のPushとPop - 神様なんて信じないんだからね! を含むブックマーク はてなブックマーク - Quartz で状態のPushとPop - 神様なんて信じないんだからね! Quartz で状態のPushとPop - 神様なんて信じないんだからね! のブックマークコメント

例えばQuartzで描いているとき、

ダッシュ線を使いたくて

コンテキストに対してダッシュ線を適応するために、

CGContextSetLineDash

を呼んでしまうと、次に線を描くときまでダッシュ線になってしまう。

そういうときは、

CGContextSaveGState(context);
...ごにょごにょ
CGContextRestoreGState(context);

とすると、

これらの間にステートを変更しても

元のステートに戻る。

恐らく描画オブジェクト単位で行うと良い。

対応があわないと、バグるので注意。

Quartz 2DリファレンスをXCodeから使えないのかな……

| 08:09 | Quartz 2DリファレンスをXCodeから使えないのかな…… - 神様なんて信じないんだからね! を含むブックマーク はてなブックマーク - Quartz 2DリファレンスをXCodeから使えないのかな…… - 神様なんて信じないんだからね! Quartz 2DリファレンスをXCodeから使えないのかな…… - 神様なんて信じないんだからね! のブックマークコメント

Quartz 2DのAPIを探すとき、

わざわざWebから引っ張るのは面倒な感じ。

XCodeってリファレンスインストールできないのかな。

Quartzと日本語

| 07:57 | Quartzと日本語 - 神様なんて信じないんだからね! を含むブックマーク はてなブックマーク - Quartzと日本語 - 神様なんて信じないんだからね! Quartzと日本語 - 神様なんて信じないんだからね! のブックマークコメント

Quartzで日本語出力を調べると、

	CGContextSelectFont(context, "HiraKakuProN-W3", 32, kCGEncodingFontSpecific);
	NSString* message = @"abcdefg";
	CGContextShowTextAtPoint(context, 10, 100, [message UTF8String], [message length]);

みたいな感じで出力できる筈なのだが、

見事に化ける。

ASCIIの文字列を渡しているのに化ける、というのが何となく納得いかないのだが……。

jorakurajorakura2008/09/03 19:58QuartzでのCGContextDrawImage問題ですが、UIImageのdraw系のメソッドを直接使えば、座標系の計算をしなくても済むのです。

こちらもiPhoneの開発をしています。今後とも宜しくお願い致します。

IsoparametricIsoparametric2008/09/04 08:27おおおおお、
ありがとうございます。
早速試したらうまくいきました。

やっぱり、用意されたオブジェクトを使った方が良いのですねー。
こちらこそ宜しくお願いいたします。

yamionpyamionp2008/10/08 07:35リファレンスですが、Xcodeのヘルプ->製品ドキュメント を選ぶとウィンドウが出るので左のメニューから必要なドキュメントセットの取得ボタンを押してあげればあとはローカルに保存されて検索も聞くようになりますよー

IsoparametricIsoparametric2008/10/21 13:14おおお、本当だ!
すごい、ありがとうございます。
すっかり遅レスで申し訳ありません。orz...

tokentokentokentoken2010/03/13 22:01StackOverflowにも同じ情報が書かれていました。これに引っかかる人は多そうですね。

http://stackoverflow.com/questions/506622/cgcontextdrawimage-draws-image-upside-down-when-passed-uiimage-cgimage

LuckieLuckie2012/10/21 13:54I can't hear ayntihng over the sound of how awesome this article is.

leqviotleqviot2012/10/22 03:14rxU5EE <a href="http://pdlirjxynxyb.com/">pdlirjxynxyb</a>

tydevatydeva2012/10/22 14:47AZhDTT , [url=http://yfschvhqokjm.com/]yfschvhqokjm[/url], [link=http://ryewicsmbwaz.com/]ryewicsmbwaz[/link], http://hzewbjqewadv.com/

cvqctieqcvqctieq2012/10/24 02:0328aTsR <a href="http://xjugcnojrfns.com/">xjugcnojrfns</a>

sgkepumlfsgkepumlf2012/10/24 08:573jkqBG , [url=http://disptrdnsrwq.com/]disptrdnsrwq[/url], [link=http://wxgpachakoob.com/]wxgpachakoob[/link], http://arbppgjbjktb.com/

最近のコメント
最近のトラックバック