Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2009, 15:19   #1
DeadWorm
 
Регистрация: 15.04.2009
Сообщений: 3
По умолчанию работа с .bmp

Код должен вычислять среднее значение цветов rgb в изображении.

Код:
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "conio.h"

int _tmain()
{
    unsigned float r = 0, g = 0, b = 0;
	int m, n;
	unsigned char k= 0;
	FILE *f;
	f = fopen("c:/test.bmp","r+b");
	fseek(f,0x12,SEEK_SET);
	fread(&n,sizeof(int),1,f);
	fread(&m,sizeof(int),1,f);
	printf("Razmer izobrazheniya Shirina: %d  Visota: %d\n", n, m);
	fseek(f,28,SEEK_SET);
	fread(&n,sizeof(int),1,f);
	printf("glubina cveta: %d\n", n);
	fseek(f, 54, SEEK_SET);
	for(int j = 0; j < n * m; j++)
		{
		 fread(&k,1,1,f);
			r += k;		 
		 fread(&k,1,1,f);
			g = g + k;
		fread(&k,1,1,f);
			b = b + k;
		}
		r = r / (n * m);
		g = g / (n * m);
		b = b / (n * m);
		printf("the average values of colors: red chanel %u, green chanel %u, blue chanel %u", r, g, b);
	fclose(f);
	getch();
	return 0;
}
Работа с глубиной цвета в 24 бита.Тестил на зеленом прямоугольнике, сначала выдает относительно корректные значения для зеленого цвета, потом на некотором шаге ненулевыми становятся значения для красного и синего каналов. Кроме того, когда смотрю в хексе - значение зеленого для каждой точки должно быть по 255, а мой код считывает 128. Подскажите, пжл, в чем проблема может быть?
DeadWorm вне форума Ответить с цитированием
Старый 15.04.2009, 18:18   #2
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

А нормально, что ты ширину и глубину цвета считываешь в одну перемененую?
Pashan вне форума Ответить с цитированием
Старый 15.04.2009, 23:32   #3
DeadWorm
 
Регистрация: 15.04.2009
Сообщений: 3
По умолчанию

а почему бы нет? старые-то данные не нужны после их вывода
DeadWorm вне форума Ответить с цитированием
Старый 16.04.2009, 14:01   #4
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Ага, и то что дальше везде стоит n*m, в смысле ширина на высоту, тоже нормально? При том, что в n уже не ширина, а глубина цвета.

Вообще, практика показывает, что использовать одну и ту же переменную под разные цели категорически вредно. Почти всегда лучше завести лишнюю переменную. И не будет того, что сейчас наблюдается в коде. И называть их лучше не m, n и т.п., а так, чтобы было понятно, что переменная означает. Типа width, height и т.п.
Pashan вне форума Ответить с цитированием
Старый 16.04.2009, 14:09   #5
DeadWorm
 
Регистрация: 15.04.2009
Сообщений: 3
По умолчанию

блин, реально ступил=) спс. вот ток косяк не в этом был.
DeadWorm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Декодирование BMP Rezet Мультимедиа в Delphi 6 24.01.2009 22:33
Bmp в ico AngelOfDeath Мультимедиа в Delphi 9 30.12.2008 06:21
Число с BMP картинке JRcoker Общие вопросы Delphi 3 07.10.2008 19:12
Сохранение в *.Bmp - файл Рустам Мультимедиа в Delphi 14 28.11.2007 21:32