画像のRGB取得

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
七氏

画像のRGB取得

#1

投稿記事 by 七氏 » 15年前

はじめて質問させていただきます
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]);
}

dic

Re:画像のRGB取得

#2

投稿記事 by dic » 15年前

画像の解像度は何ビットでしょうか?
モノクロ、8ビット、16ビット、24ビット、32ビットで
バイナリの内容が異なってきます

h2so5

Re:画像のRGB取得

#3

投稿記事 by h2so5 » 15年前

printf("%i",pixcel[0][0][0]);

ではどうでしょうか?

追記:

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

七氏

Re:画像のRGB取得

#4

投稿記事 by 七氏 » 15年前

>>dicさん
すみません、抜けていました
24ビットです

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

シエル

Re:画像のRGB取得

#5

投稿記事 by シエル » 15年前

あれ?黒って0,0,0じゃないんですか? 画像

七氏

Re:画像のRGB取得

#6

投稿記事 by 七氏 » 15年前

っと・・・すみません、色々やってて頭が混乱してたみたいです・・・
printf("%i",pixcel[0][0][0]);
で再度やったみたところ上手くいきました
教えてくれてありがとうございました

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

h2so5

Re:画像のRGB取得

#7

投稿記事 by h2so5 » 15年前

pngのヘッダーのサイズは調べれば出てくると思いますが、
bmpと違いpngは圧縮されているのでヘッダーをちゃんと読まないとRGBの取得は不可能です。

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

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

七氏

Re:画像のRGB取得

#8

投稿記事 by 七氏 » 15年前

pngは難しいのですか・・・ありがとうございます
現状、24ビットで問題ないですし256色bmpなども視野に調べてみようと思います
libpngは今wikiを読んでみましたがとても有用そうですね

閉鎖

“C言語何でも質問掲示板” へ戻る