静岡県富士市在住のiPhoneアプリ開発者ブログ -50ページ目

ビットマップのピクセルのRGBを取得する

ビットマップファイルからタップした座標のピクセルのRGBを取得する方法

注意点
・デバイスの原点は左上で下にy座標が増えていく、一方ビットッマップファイル構造は下のデータから上に向かって格納されている



下記の例では、hoge.bmp の座標(x, y)でのピクセルのRGBを取得します。


UIImage *targetimage = [UIImage imageNamed:@"hoge.bmp"];//BMP を読み込み
int x,y;//座標

CGImageRef cgImage = targetimage.CGImage; //CGImage のハンドルを取得

// 画像の大きさを取得する
size_t width = CGImageGetWidth(cgImage);
size_t height = CGImageGetHeight(cgImage);

// データプロバイダを取得する
CGDataProviderRef dataProvider = CGImageGetDataProvider(cgImage);

// ビットマップデータを取得する
CFDataRef data = CGDataProviderCopyData(dataProvider);
int length = CFDataGetLength(data);
UInt8* buffer = (UInt8*)CFDataGetBytePtr(data);

// ピクセルのポインタを取得する
UInt8 *index = buffer + length + 3 * (x + (y-(height -1))*width);
//注意点でも記述したが、デバイスの座標系とビットマップのデータ構造の相違を考慮してピクセルのポインタ位置を設定

// RGBの値を取得する
unsigned char r, g, b;
r = *(index);
g = *(index + 1);
b = *(index + 2);

NSLog([NSString stringWithFormat:@"%d %d %d", (int)r,(int)g,(int)b]);
//座標のピクセルが赤であれば、ログに 「255 0 0」と表示される。

文字(NSString)の描画サイズを取得する

文字の描画時のサイズを取得したい場合、NSString の - (CGSize)sizeWithFont:(UIFont *)font を使う

使用例

NSString *string = @"あいうえお";
CGSize size = [string sizeWithFont:[UIFont fontWithName:@"Arial" size:40.0]];


これで、「あいうえお」という文字をフォント名「Arial」40.0ポイントで描画されるときの幅(width)と高さ(height)サイズを取得できる。

オリジナルの色(UIColor)を作成する

任意の色を作成したい場合は、UIColor の colorWithRed: green: blue: alpha:を使うと便利

RGB が CC6633 の場合は下記のようにする

[UIColor colorWithRed:(204.0/255.0) green:(102.0/255.0) blue:(51.0/255.0) alpha:1.0];

alpha は、0.0~1.0 で、0.0 だと完全に透明になる