水平垂直投影的問題
以下是我的原始code
void __fastcall TForm1::ButtonClick(TObject *Sender)
{
// ??水平与垂直方向的投影量
long ProjectV[2000] = {0};
long ProjectH[2000] = {0};
long Vmax = 0, Hmax = 0;
Byte *ptr;
for(int row = 0; row < 1279; row++)
{
ptr = (Byte *)Image1->Picture->Bitmap->ScanLine[row];
for(int col = 0; col < 1023; col++)
{
if(ptr[col*3] > 125) // 白?
{
ProjectV[col]++; // 垂直方向投影的?量+1
ProjectH[row]++; // 水平方向投影的?量+1
if(ProjectV[col] > Vmax) Vmax = ProjectV[col]; // ??垂直投影最大值
if(ProjectH[row] > Hmax) Hmax = ProjectH[row]; // ??水平投影最大值
}
}
}
// ?出水平方向投影
Image2->Canvas->Pen->Color = clWhite;
for(int row = 0; row < 1279; row++)
{
Image2->Canvas->MoveTo(Image2->Width, row);
Image2->Canvas->LineTo(Image2->Width * (1.0 - (double)ProjectH[row] / (double)Hmax), row);
}
// ?出垂直方向投影
Image3->Canvas->Pen->Color = clWhite;
for(int col = 0; col < 1023; col++)
{
Image3->Canvas->MoveTo(col, Image3->Height);
Image3->Canvas->LineTo(col, Image3->Height * (1.0 - (double)ProjectV[col] / (double)Vmax));
}
}
編譯無問題
為何執行時會出現以下訊息:
Acess violation address 00401CE8 in moudle 'Project.exe'.Read of address 017E001
[解决办法]
确定Bitmap的大小与格式是正确的。