CGImageGetWidth(image);
CGImageGetHeight(image);
が
[image size].width;
[image size].height;
になるのは喜ばしいことだ。
は、要するにカレントのものなのかな?
[image drawAtPoint:CGPointMake(0,0)];
にはコンテキストを指定しないため、
そうなんじゃないかなぁ、という理解のままだが、
もう少し描いていけばわかるようになるだろう。
少なくとも
CGContextStrokeRect
などで描いたラインとの前後関係は発生するので、
理解は間違っていないという方向で進める。
なかなか使いやすい。
XCodeのメニュから簡単に設定することができる。
ちょくちょく書き換えると思うので、いれておくべき。
Sio’s Gadget Blog - WebLog of Mac, iPod and iPhone -: [dev log] XcodeでSubversionを使う(1)
Sio’s Gadget Blog - WebLog of Mac, iPod and iPhone -: [dev log] XcodeでSubversionを使う(2)
Sio’s Gadget Blog - WebLog of Mac, iPod and iPhone -: [dev log] XcodeでSubversionを使う(3)
Sio’s Gadget Blog - WebLog of Mac, iPod and iPhone -: [dev log] XcodeでSubversionを使う(4)
簡単、そして素敵。
quartz | |
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みたいなもん。
quartz | |
MOSAのテクニカルドキュメントが良さそう。
http://www.mosa.gr.jp/?page_id=19
普通のOSX向けのものだが、
Cocoaに対するグラフィックやテキスト周り、
OpenGL周りのテキストとしては良い感じなり。
quartz | |
普通に
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 | |
例えばQuartzで描いているとき、
ダッシュ線を使いたくて
コンテキストに対してダッシュ線を適応するために、
CGContextSetLineDash
を呼んでしまうと、次に線を描くときまでダッシュ線になってしまう。
そういうときは、
CGContextSaveGState(context); ...ごにょごにょ CGContextRestoreGState(context);
とすると、
これらの間にステートを変更しても
元のステートに戻る。
恐らく描画オブジェクト単位で行うと良い。
対応があわないと、バグるので注意。
quartz | |
Quartzで日本語出力を調べると、
CGContextSelectFont(context, "HiraKakuProN-W3", 32, kCGEncodingFontSpecific); NSString* message = @"abcdefg"; CGContextShowTextAtPoint(context, 10, 100, [message UTF8String], [message length]);
みたいな感じで出力できる筈なのだが、
見事に化ける。
ASCIIの文字列を渡しているのに化ける、というのが何となく納得いかないのだが……。
jorakuraQuartzでのCGContextDrawImage問題ですが、UIImageのdraw系のメソッドを直接使えば、座標系の計算をしなくても済むのです。
こちらもiPhoneの開発をしています。今後とも宜しくお願い致します。
Isoparametricおおおおお、
ありがとうございます。
早速試したらうまくいきました。
やっぱり、用意されたオブジェクトを使った方が良いのですねー。
こちらこそ宜しくお願いいたします。
yamionpリファレンスですが、Xcodeのヘルプ->製品ドキュメント を選ぶとウィンドウが出るので左のメニューから必要なドキュメントセットの取得ボタンを押してあげればあとはローカルに保存されて検索も聞くようになりますよー
Isoparametricおおお、本当だ!
すごい、ありがとうございます。
すっかり遅レスで申し訳ありません。orz...
tokentokenStackOverflowにも同じ情報が書かれていました。これに引っかかる人は多そうですね。
http://stackoverflow.com/questions/506622/cgcontextdrawimage-draws-image-upside-down-when-passed-uiimage-cgimage
LuckieI can't hear ayntihng over the sound of how awesome this article is.
leqviotrxU5EE <a href="http://pdlirjxynxyb.com/">pdlirjxynxyb</a>
tydevaAZhDTT , [url=http://yfschvhqokjm.com/]yfschvhqokjm[/url], [link=http://ryewicsmbwaz.com/]ryewicsmbwaz[/link], http://hzewbjqewadv.com/
cvqctieq28aTsR <a href="http://xjugcnojrfns.com/">xjugcnojrfns</a>
sgkepumlf3jkqBG , [url=http://disptrdnsrwq.com/]disptrdnsrwq[/url], [link=http://wxgpachakoob.com/]wxgpachakoob[/link], http://arbppgjbjktb.com/
32×32のgif画像を画面に150枚描画した時、CGContextDrawImageではギリギリ30fps出てましたが、
drawAtPointの場合は24fps(低い時は21fpsまで低下)でした。
あと、CGContextDrawImageだと画像内の一部分だけを切り抜く事が出来るので、ゲーム開発の際に
はCGContextDrawImageを使う方が良さそうです。
まぁQuartzで描画するよりもOpenGLで描画する方がもっと速いですが・・・
なるほど……。
元々、タイマを使って処理を重くするとタッチイベントが起きなくなったり、
フレームレートが安定しない感じなので、
それは重要ですね。ありがとうございます。
そして、OpenGLは確かに……。
多忙にて触れていないのですが、
GLに乗り換えようか思案中です。
助かります。