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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2015, 02:13   #1
Никита69
Пользователь
 
Регистрация: 15.11.2015
Сообщений: 13
По умолчанию Прокомментируйте пожалуйста код

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

typedef unsigned short int	word; 
typedef unsigned int		dword;
#pragma pack(push)
#pragma pack(1)
struct BitMapHeader
{
	word	bfType;				// тип файла, для BMP - BM 
	dword	bfSize;				// размер файла - dword (истинный размер 34342-1078+14)
	word	bfReserved1;        // не используется 
	word	bfReserved2;        // не используется 
	dword	bfOffbits;			// смещение данных битового образа от заголовка в байтах (1078) 

	// Далее идет структура BITMAPINFOHEADER 
	
	dword	biSize ;            // число байт, занимаемых структурой  BITMAPINFOHEADER 
	dword	biWidth;			// ширина витового образа в пикселях
	dword	biHeight;			// высота битового образа в пикселях
	word	biPlanes;           // число битовых плоскостей устройства
	word	biBitCount;         // число битов на пиксель 
	dword	biCompression;		// тип сжатия 
	dword	biSizeImage;		// размер картинки в байтах (без 1078 т.е.33264)
	dword	biXPelPerMeter;		// горизонтальное разрешение устройства, пиксель/м 
	dword	biYPelPerMeter;		// вертикальное разрешение устройства,  пиксель/м 
	dword	biClrUsed;			// число используемых цветов 
	dword	biClrImportant;		// число "важных" цветов 
};

typedef unsigned char BYTE;

#pragma pack(pop)

struct tagRGBQUAD { 
        BYTE    rgbBlue;
        BYTE    rgbGreen;
        BYTE    rgbRed;
        BYTE    rgbReserved;
} ;

BitMapHeader ReadHeader(FILE * f);
void ReadQuad(tagRGBQUAD* RGB,int biSize,FILE *f);
void WriteQuad(tagRGBQUAD* RGB,int biSize,FILE *f);
int poisk(tagRGBQUAD* RGB,int r,int g,int b);

int main(int argc, char* argv[])
{
	BitMapHeader header;
	tagRGBQUAD RGBQuad[256];
	
	FILE* fb;	
	char filename[]="1.bmp";
	if(!(fb=fopen(filename,"r+b"))){printf("file not open");return 1;}

	// заголовок
	header=ReadHeader(fb);
	// палитра
	ReadQuad(RGBQuad,header.biSize+14,fb);
	int n;
	int m;
	n=header.biHeight;
	m=header.biWidth;
	
	RGBQuad[5].rgbRed = 255; RGBQuad[5].rgbGreen = 0; RGBQuad[5].rgbBlue = 0; RGBQuad[5].rgbReserved = 0;
	int red = 5;
	int blue = poisk(RGBQuad, 0, 0, 255);

	BYTE **a;
	a=new BYTE*[n];
	for(int i=0;i<n;i++)
	{
		a[i]=new BYTE[m];
	}

	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if (i > n/2-8-1 && i < n/2+8 && j > n/2-8-1 && j < n/2+8)
				a[i][j] = red;
			else
				a[i][j] = blue;
		}
	}
	fseek(fb,header.bfOffbits,SEEK_SET);

	for(int i=0;i<n;i++){
		fwrite(a[i],m,1,fb);
	}
	delete[]a;

	WriteQuad(RGBQuad,header.biSize+14,fb);
	fclose(fb);
	return 0;
}
BitMapHeader ReadHeader(FILE * f)
{
	BitMapHeader h;
	int numread;
	fseek(f,0,SEEK_SET);
	if(!(numread=fread((char*)&h,sizeof(BitMapHeader),1,f)))exit(1);
	return h;
}
	
void ReadQuad(tagRGBQUAD* RGB,int biSize,FILE *f)
{
	fseek(f,biSize,SEEK_SET);
	fread(RGB,1024,1,f);
}

void WriteQuad(tagRGBQUAD* RGB,int biSize,FILE *f)
{
	fseek(f,biSize,SEEK_SET);
	fwrite(RGB,1024,1,f);
}

int poisk(tagRGBQUAD*RGBQuad,int r,int g,int b)
{

	for(int i=0;i<256;i++)
		if(RGBQuad[i].rgbRed == r && RGBQuad[i].rgbGreen==g &&  RGBQuad[i].rgbBlue == b)
			return i;
}
Никита69 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прокомментируйте код stenl1 C# (си шарп) 4 18.10.2012 06:52
Прокомментируйте код Nicolas_C++ Общие вопросы C/C++ 4 03.08.2012 13:45
Прокомментируйте код ArmanPrestige Общие вопросы C/C++ 3 10.07.2012 08:21
Прокомментируйте код ZyaT-OK Помощь студентам 11 17.01.2011 21:48
Прокомментируйте и объясните код Serjuk Помощь студентам 1 18.05.2010 17:56