Программа преобразовывает BMP файл, создав вокpуг него pамку из пикселей случайного цвета. Шиpина рамки - 15 пикселей.
Прикреплено фото с возникающими ошибками. Помогите их исправить.
файл Unit1.cpp//---------------------------------------------------------------------------
#include <vcl.h>
#include "bmp.h"
#define MAXCOLORTC
//#include "wingraph.h"
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
Bmp New;
FileHeader *fh;
MAPINFO *mi;
RGBquad *rgb;
//New.Open("CAT16.BMP");
fh=New.GetFH();
mi=New.GetMapInfo();
BYTE *b=(BYTE*)(fh->bfOffbits+(long)fh);
DWORD w,h;
w=mi->Width;
h=mi->Height;
for (int i=0;i<h;i++)
for (int j=0;j<w;j++)
{
if ((i<15)||(i>(h-1-15)))
b[i*(w/2+1)+j]=(int)((float)rand()/RAND_MAX*256);
if ((j<15-8)||(j>w+7-15))
b[(i*(w/2)+j)]=(int)((float)rand()/RAND_MAX*256);
}
//New.Save("gvozdika_frame.bmp");
//Image1->Picture->LoadFromFile("CAT16_frame.BMP");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
файл "bmp.h"#include <io.h>
#include <stdio.h>
#pragma pack(1)
struct FileHeader
{
WORD bfType; //тип файла
DWORD bfSize; //размер файла в dword
WORD bfReserved1; //не используется
WORD bfReserved2; //не используется
DWORD bfOffbits; //смещение данных битового образа от заголовка в байтах
};
struct MAPINFO
{
DWORD Size; //число байт, занимаемых структурой InfoHeader
DWORD Width; //ширина битового образа в пикселях
DWORD Height; //высота битового образа в пикселях
WORD Planes; //число битовых плоскостей устройства
WORD BitCount; //число битов на пиксель
DWORD Compression; //тип сжатия
DWORD SizeImage; //размер картинки в байтах
long XPelsPerMeter; //горизонтальное разрешение устройства, пиксель/м
long YPelPerMeter; //вертикальное разрешение устройства, пиксель/м
DWORD ClrUsed; //число используемых цветов
DWORD ClrImportant; //число "важных" цветов
};
struct RGBquad
{
byte rgbRed; //интенсивность красного
byte rgbGreen; //интенсивность зеленого
byte rgbBlue; //интенсивность голубого
byte rgbReserved; //не используется
};
class Bmp
{
private:
void *pBmp;
long SizeFile;
public:
Bmp();
~Bmp();
void Open(char* fn);
void Save(char* fn);
FileHeader *GetFH();
MAPINFO *GetMapInfo();
RGBquad *GetMap();
};
void Bmp::Save(char* fn)
{
FILE* File;
File=fopen(fn,"wb");
fwrite(pBmp,1,SizeFile,File);
fclose(File);
}
RGBquad *Bmp::GetMap()
{
RGBquad *rgb;
rgb=(RGBquad *)((long)pBmp+sizeof(FileHeader)+sizeof(MAPINFO));
return rgb;
}
MAPINFO *Bmp::GetMapInfo()
{
MAPINFO *mi;
mi=(MAPINFO*)((long)pBmp+sizeof(FileHeader));
return mi;
}
FileHeader *Bmp::GetFH()
{
FileHeader *fh;
fh=(FileHeader *)pBmp;
return fh;
}
Bmp::Bmp()
{
pBmp=0;
SizeFile=0;
}
Bmp::~Bmp()
{
delete []pBmp;
}
void Bmp::Open(char* fn)
{
FILE* File;
int hFile;
File=fopen(fn,"rb");
hFile=_fileno(File);
SizeFile=filelength(hFile);
pBmp=(BYTE*)malloc(SizeFile);
fread(pBmp,1,SizeFile,File);
fclose(File);
}