Visual c++ C+中的局部二进制模式+;
我对此代码有问题:private:Visual c++ C+中的局部二进制模式+;,visual-c++,c++-cli,Visual C++,C++ Cli,我对此代码有问题:private: private: System::Void lBPToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { int ** YP; Bitmap ^ bmpPictureLBP = gcnew Bitmap(W, H); int vn[2][8] = { { 0, 1, 1, 1, 0, -1,
private: System::Void lBPToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
int ** YP;
Bitmap ^ bmpPictureLBP = gcnew Bitmap(W, H);
int vn[2][8] = { { 0, 1, 1, 1, 0, -1, -1, -1 },
{ 1, 1, 0, -1, -1, -1, 0, 1 } };
YP = new int*[W];
for (int i = 0; i < W; i++)
{
YP[i] = new int[H];
for (int j = 0; j < H; j++)
{
for (int k = 0; k < 8; k++)
for (int l = 0; k < 8; k++)
YP[i][j] = Y[i + vn[1][k]][j +vn[2][l]];
bmpPictureLBP->SetPixel(i, j, Color::FromArgb(YP[i][j], YP[i][j], YP[i][j]));
}
}
private:System::Void lBPToolStripMenuItem\u单击(系统::对象^sender,系统::事件参数^e){
int**YP;
位图^bmpPictureLBP=gc新位图(W,H);
int vn[2][8]={{0,1,1,1,0,-1,-1,-1},
{ 1, 1, 0, -1, -1, -1, 0, 1 } };
YP=新整数*[W];
对于(int i=0;iSetPixel(i,j,Color::FromArgb(YP[i][j],YP[i][j],YP[i][j]);
}
}
有人能帮我吗?
首先不会出现错误,但调试后,他们告诉我“指示顺序内存已损坏”,并在自动窗口中显示红色:+YP[i]0x0669AFB0 int*我看到几个问题:
for (int k = 0; k < 8; k++)
for (int l = 0; k < 8; k++)
- 您已将
声明为大小为2的数组,这意味着数组索引为0和1。您正在访问数组索引1和2;您正在离开数组的末尾vn
- 您正在访问附近各种索引的
:i+1、i-1、j+1、j-1。YP
- 您还没有初始化
,直到for循环的下一次迭代才进行初始化YP[i+1]
- 您没有进行范围检查:如果
或i
为0怎么办?您将访问j
或YP[-1]
,两者都无效YP[i][1]
- 您还没有初始化
YP[i][j]
,但没有保存上次的结果。如图所示,您的模糊算法只需复制像素YP[i-1][j+1]
,有效地将图像向右上方移动一个像素。(也许您有正确混合像素的代码,但您没有将其复制到web。)
int vn[2][8] = { { 0, 1, 1, 1, 0, -1, -1, -1 },
{ 1, 1, 0, -1, -1, -1, 0, 1 } };
YP[i][j] = Y[i + vn[1][k]][j +vn[2][l]];