====== UIImageをTGA形式で保存する ======
32bitカラー専用でc++とstlで記述しています。\\
デバッグで使用することを前提にしているのでエラーチェックはしていません。\\
保存先がわかりにくいため、デバッグ時はコンソールに保存先を表示します。\\
//*****************************************************************************
//! TGA 処理
//*****************************************************************************
#ifndef CH_IMAGE_TGA_H
#define CH_IMAGE_TGA_H
//-------------------------------------------------------------------------
//! TGA 構造体
//-------------------------------------------------------------------------
#pragma pack(push,1)
#pragma pack(1)
struct TGA_HEADER {
u08 IDLength ; //!< ID フィールドの長さ
u08 ColorMapType ; //!< カラーマップの形式
u08 ImageType ; //!< イメージ形式
u16 CMapStart ; //!< 最初のカラーマップエントリ
u16 CMapLength ; //!< カラーマップの長さ
u08 CMapDepth ; //!< カラーマップエントリのサイズ
u16 XOffset,YOffset ; //!< イメージの原点
u16 Width,Height ; //!< イメージの幅と高さ
u08 PixelDepth ; //!< 1 ピクセルあたりのビット数
u08 ImageDescriptor ; //!< イメージ記述子ビット
} ;
#pragma pack(pop)
//-------------------------------------------------------------------------
//! UIImage を TGA で保存
//-------------------------------------------------------------------------
void ImageSaveTag(const string filename,const UIImage *image) ;
#endif /* CH_IMAGE_TGA_H */
//*****************************************************************************
// TGA 処理
//*****************************************************************************
#import "../chlibs.h"
//*****************************************************************************
// UIImage を TGA で保存
//*****************************************************************************
void ImageSaveTag(const string filename,const UIImage *image) {
string fullpath = [NSHomeDirectory() UTF8String] ;
fullpath += filename ;
#ifdef DEBUG
NSLog(@"save = %@",[NSString stringWithUTF8String:fullpath.c_str()]) ;
#endif
CGImageRef ImgRef = image.CGImage ;
size_t linebyte = CGImageGetBytesPerRow(ImgRef) ;
CFDataRef DataRef = CGDataProviderCopyData(CGImageGetDataProvider(ImgRef)) ;
const char *data = (const char *)CFDataGetBytePtr(DataRef) ;
TGA_HEADER header ;
memset(&header,0,sizeof(header)) ;
header.ImageType = 2 ; // フルカラー画像
header.Width = CGImageGetWidth(ImgRef) ;
header.Height = CGImageGetHeight(ImgRef) ;
header.PixelDepth = 32 ; // 色深度
header.ImageDescriptor = 0x20 ; // 上から下
ofstream ofs(fullpath.c_str(),ios::out | ios::trunc | ios::binary) ;
ofs.write((char *)&header,sizeof(header)) ;
ofs.write(data,linebyte * header.Height) ;
ofs.close() ;
CFRelease(DataRef) ;
}