NSImageをCore Graphicsで使う方法
NSImageだけでもいろいろな処理が出来ますが、いろいろと最適化されすぎてて逆に不便なこともたまにあります。そんな時には、Core Graphicsを使うことで、細かいところまで好きに操作することが出来ます。
動作を確認した環境
環境 | 情報 |
---|---|
OS X | 10.9.2 |
Xcode | 5.1 |
Date | 2014/04/03 |
使い方
具体的にはこんな感じで。
- (void)drawImage:(NSImage*)image toRect:(CGRect)to fromRect:(CGRect)from { // イメージの指定された範囲を指定された範囲に描画 // 描画先の範囲が指定されてない場合、全体に描画 if( CGRectIsEmpty( to ) ) to.size = _size; // 描画元の範囲が指定されてない場合、全体を描画 if( CGRectIsEmpty( from ) ) from.size = sk4ImagePixelSize( image ); // 実際の描画処理 CGImageRef src_all = [image CGImageForProposedRect:NULL context:nil hints:nil]; CGImageRef src_ref = CGImageCreateWithImageInRect( src_all, from ); CGContextDrawImage( _context, to, src_ref ); CGImageRelease( src_ref ); }
やってることは単純でCGImageForProposedRectでCGImageRefを取得。CGImageCreateWithImageInRectで必要な部分だけを切り出しています。あとは、Core Graphics系のAPIで普通に使うだけ。
簡単ですね。
備考
実装例
See_Ku / Minerba — Bitbucket
https://bitbucket.org/See_Ku/minerba