金曜日, 9月 02, 2011

COCOA備忘

これは自分のための備忘です。すみません。


  • Resources フォルダのファイルパスをプログラム実行時に取得するコード
    • [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"extension"]

  • CGLayer上にテキストを出力する方法。
    NSViewなどに出力する時はNSStringのdrawInRectが使えるが、CGLayerに出力するケースには使えない。この場合CoreTextを使う方法が簡単そうであった。
    • NSAttributedStringを生成
      NSAttributedString *attrStr = [[NSAttributedString allocinitWithString:@"こんにちは" attributes:fontAttributes]; 
    • CTLineCreateWithAttributedStringを使って CTLineRefを生成
      CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attrStr);
    • CGContextSetTextPositionを使って出力位置を指定
      CGContextSetTextPosition(context, pt.x, pt.y);
    • CTLineDrawを使って文字を出力
      CTLineDraw(line, context);
    • メモリの解放
      CFRelease(line);
      [attrStr release];

  • イメージの特定の色を透過させる方法。
    このような処理を Maskingと呼ぶ。
    rect はNSRect型で表示したい場所をさしている。
    ctx はグラフィックコンテキストをさしている。
    • 元のイメージが NSImage *nsimg に生成済みだとする。
      これからCGImageRefを取得する。
      CGImageRef cgimg = [nsimg CGImageForProposedRect:&rect context: ctx hints: [[NSDictionary alloc] init]];
    • マスキングカラーを設定する
      CGFloat maskingColors[6] = {255,255,255,255,255,255};
      //左から二つずつ組となりそれぞれR,G,Bの範囲を示している。
    • マスキングをかけたイメージを生成する
      CGImageRef maskedImage = CGImageCreateWithMaskingColors(cgimg, maskingColors);
    • コンテキストに描く
      CGContextDrawImage(ctx, rect, maskedImage);

0 件のコメント: