Официальный сайт студ.городка НГТУ
Программирование и БД » [работа с bmp в C++Builder6] подскажите в чем может быть ошибка 

#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

Программирование и БД » [работа с bmp в C++Builder6] подскажите в чем может быть ошибка 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.029 сек.
Выполнено 14 запросов.