ページ 11

画像のRGB取得

Posted: 2010年8月28日(土) 21:27
by 七氏
はじめて質問させていただきます
C言語はある程度はわかりますが、まだ勉強中です
タイトルの通り、16*16の指定した画像の左上([0,0])のドットのRGBを取得したいのですが上手くいきません
検索などをして一応下記のように作ってはみたのですが0.0000が表示されるだけで取得してくれません
取得位置の問題かと思い、全体を黒に塗った画像を使ってみたのですが0のままでした
どこが間違っているのでしょうか?お教えいただけると助かります
(下記のプログラムでは16*16のtest.bmpというファイルを読み込んで、左上のRedを取得しようとしています)

#include <stdio.h>
#include <stdlib.h>

int main(void){
FILE *fo;
unsigned char header[54];
unsigned char pixcel[16][16][3];

fo=fopen("test.bmp","rb");
fread(header,1,54,fo);//前54byte(?)が邪魔
fread(pixcel,1,16*16*3,fo);

fclose(fo);
printf("%f",pixcel[0][0][0]);
}

Re:画像のRGB取得

Posted: 2010年8月28日(土) 21:52
by dic
画像の解像度は何ビットでしょうか?
モノクロ、8ビット、16ビット、24ビット、32ビットで
バイナリの内容が異なってきます

Re:画像のRGB取得

Posted: 2010年8月28日(土) 22:00
by h2so5
printf("%i",pixcel[0][0][0]);

ではどうでしょうか?

追記:

あと、pixcel[0][0][0]は左下のピクセルを参照していますよ。 画像

Re:画像のRGB取得

Posted: 2010年8月28日(土) 23:08
by 七氏
>>dicさん
すみません、抜けていました
24ビットです

>>h2so5さん
それで試してみましたが、全面黒[255,255,255]で0でした
左下だとは知りませんでした・・・情報ありがとうございます

Re:画像のRGB取得

Posted: 2010年8月28日(土) 23:10
by シエル
あれ?黒って0,0,0じゃないんですか? 画像

Re:画像のRGB取得

Posted: 2010年8月28日(土) 23:15
by 七氏
っと・・・すみません、色々やってて頭が混乱してたみたいです・・・
printf("%i",pixcel[0][0][0]);
で再度やったみたところ上手くいきました
教えてくれてありがとうございました

[追加]
24ビット bmpファイルのバイナリの内容の54byte分がRGBを取得するのに邪魔(ヘッダー)だというのは検索して見つけたのですが、pngファイルの場合のヘッダー部分のbyteがわかりません
わかる方が居ましたら教えてもらえると助かります 画像

Re:画像のRGB取得

Posted: 2010年8月29日(日) 00:39
by h2so5
pngのヘッダーのサイズは調べれば出てくると思いますが、
bmpと違いpngは圧縮されているのでヘッダーをちゃんと読まないとRGBの取得は不可能です。

本当はbmpもヘッダーをちゃんと読むべきです。
pixcel[0][0][0]が左上を指すのか左下を指すのかはbmpによって違うこともありますし、
ビット数もいくつか種類があるので。

pngのデータは複雑で私もよく分かりません。
自分だったらlibpngに丸投げかも... 画像

Re:画像のRGB取得

Posted: 2010年8月29日(日) 01:01
by 七氏
pngは難しいのですか・・・ありがとうございます
現状、24ビットで問題ないですし256色bmpなども視野に調べてみようと思います
libpngは今wikiを読んでみましたがとても有用そうですね