#1 14.03.08 22:44
[работа с bmp в C++Builder6] подскажите в чем может быть ошибка
пишу бакалаврскую
нужно представить изображение bmp в виде матрице пикселей
вот че я делаю, вроде все правильно должно быть....выдаю матрицу получившуюся в файл, а она почему-то нулевая...уже шарики за ролики) помогите))))
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
FILE *output;
output=fopen("D:\\matrix.txt","w");
OpenDialog->InitialDir="C:\\mainproject\\";
OpenDialog->Execute();
Edit1->Text=OpenDialog->FileName;
try
{
if(Edit1->Text!="")
Image->Picture->Bitmap->LoadFromFile(Edit1->Text);
Image->Update();
Image->Show();
}
catch(Exception&exception){
MessageBox(Handle,"Incorrect file name","Error",MB_OK);
}
BITMAPFILEHEADER bfh; //заголовок файла
BITMAPINFOHEADER bih; //структура
int Width,Height;
RGBQUAD Palette[256];
BYTE*inBuf;
DWORD RW;
HANDLE hIn;
int x,y,i,j,k;
hIn=CreateFile(OpenDialog->FileName.c_str(),GENERIC_READ,FILE_SHARE_READ,NULL,
OPEN_EXISTING,0,NULL);
if(hIn==INVALID_HANDLE_VALUE)
return;
Width=Image->Picture->Bitmap->Width;
Height=Image->Picture->Bitmap->Height;
matrix=new int*[Width];
matrix_new=new int*[Width];
inBuf=new BYTE[Width];
ReadFile(hIn,inBuf,Width,&RW,NULL);
for(i=Height-2;i>=0;i--)
{matrix[i]=new int[Height];
matrix_new[i]=new int[Height];
ReadFile(hIn,inBuf,Width,&RW,NULL);
for(j=0;j<Width;j++)
{
matrix[i][j]=GetRValue(Image->Picture->Bitmap->Canvas->Pixels[i][j]);
fprintf(output,"matrix[%d][%d]=%f\n",i,j,matrix[i][j]);
}
}
}
Offline
#2 15.03.08 22:25
Re: [работа с bmp в C++Builder6] подскажите в чем может быть ошибка
дадада, я сегодня села и сразу увидела эту ошибку))))
но все равно спасибо))
только когда поняла что матрица формируется все же верно, задумалась, почему же теперь фильтры не применяются к изображению...
Вот например подчеркивание границ
void __fastcall TMainForm::BoundClick(TObject *Sender)
{
if(Edit1->Text=="")
{AnsiString *str=new AnsiString("Load image");
StatusLine->SimpleText=*str;
}
else
{
None->Checked=False;
Bar->Checked=False;
Bound->Checked=True;
Image->Picture->Bitmap->LoadFromFile(Edit1->Text);
int Width,Height;
Width=Image->Picture->Bitmap->Width;
Height=Image->Picture->Bitmap->Height;
podcherkivanie(matrix,Width,Height);
}
}
void podcherkivanie(int **matrix, int w,int h)
{
FILE *out2;
out2=fopen("D:\\podcherkivanie.txt","w");
int i,j;
int mas[300][300];
for(i=1;i<(h-2);i++)
for(j=1;j<(w-1);j++)
{
//mas[i][j]=-matrix[i-1][j-1]-matrix[i-1][j]-matrix[i-1][j+1]-matrix[i][j-1]+9*matrix[i][j]-matrix[i][j+1]-matrix[i+1][j-1]-matrix[i+1][j]-matrix[i+1][j+1];
//mas[i][j]=-matrix[i-1][j]-matrix[i][j-1]+5*matrix[i][j]-matrix[i][j+1]-matrix[i+1][j];
mas[i][j]=matrix[i-1][j-1]-2*matrix[i-1][j]+matrix[i-1][j+1]-2*matrix[i][j-1]+5*matrix[i][j]-2*matrix[i][j+1]+matrix[i+1][j-1]-2*matrix[i+1][j]+matrix[i+1][j+1];
fprintf(out2,"mas[%d][%d]=%d\n",i,j,mas[i][j]);
if(mas[i][j]>255) matrix[i][j]=255;
else if(mas[i][j]<0) matrix[i][j]=0;
else matrix[i][j]=matrix[i][j];
}
}
почему-то изображение какое было, такое и остается после применения такого фильтра
я в этом деле новичок преновичок, поэтому прошу на меня сильно не ругаться, если я прям очень-очень туплю, но хочется разобраться) вроде по книжкам так...
хэлп ми))
Исправлено ябл@чко (15.03.08 22:29)
Offline

