@Muriam

C++ builder. Работа с графикой. Как исправить ошибки в коде?

Программа преобразовывает BMP файл, создав вокpуг него pамку из пикселей случайного цвета. Шиpина рамки - 15 пикселей.

Прикреплено фото с возникающими ошибками. Помогите их исправить.

5c4ca74def750286553927.pngфайл 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);
}
  • Вопрос задан
  • 355 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
__fastcall TForm1::TForm1(TComponent* Owner)

После этой строчке у вас в воздухе висит : TForm(Owner), потом идет пустой блок кода, затем объявление Bmp New и последующий код также висят в воздухе. Копировать код из Интернета надо бы поаккуратней.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы