int CVICALLBACK rowSplit (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { Point point; PixelValue grayLevel; int width; int height; int topRow; int num_row; int bottomRow; int _height; // 每行文字上界和下界的数目 int topm=0, botm=0; // 获取输入图像的宽高 imaqGetImageSize (DestImage, &width, &height); // 每行(反色后)白点的数目 int *pt = calloc(height, sizeof(int)); switch (event) { case EVENT_COMMIT: for(int h = 0; h < height; h++) { for(int w = 0; w < width; w++) { point.x = w; point.y = h; imaqGetPixel(SourceImage, point, &grayLevel); if(grayLevel.grayscale == 255.0) *(pt + h) = *(pt + h) + 1; } } // 记录每行文字上界和下界 for(int h = 0; h < height - 1; h++) { if(*(pt + h) == 0 & *(pt + h + 1) > 0) { topRow[topm++]=h; num_row = num_row + 1; } if(*(pt + h) > 0 & *(pt + h + 1) == 0) bottomRow[botm++] = h; } // 记录行分割后每行文字的高度 for(int topm = 0; topm < num_row; topm++) _height[topm] = bottomRow[topm] - topRow[topm]; break; } return 0; } int CVICALLBACK Quit_imgpanel (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: QuitUserInterface (0); break; } return 0; }
时间: 2024-04-02 15:33:50 浏览: 114
利用Labwindows调用VC++函数.docx
这段代码存在许多问题:
1. 代码中定义了许多变量,但没有初始化它们。例如 `num_row`、`topRow`、`bottomRow` 和 `_height` 等变量在使用之前没有初始化,这可能会导致不可预知的结果。
2. 变量 `topm` 和 `botm` 在 `for` 循环中被重复定义,这会导致编译错误。
3. 在 `switch` 语句中,只有 `EVENT_COMMIT` 事件被处理。如果你的程序需要处理其他事件,你需要相应地添加代码。
4. 在 `for` 循环中,逻辑运算符 `&` 被错误地用于逻辑与操作。正确的逻辑与操作符应该是 `&&`。
5. 变量 `_height` 被定义为整数类型,但它的使用方式表明它应该是一个整数数组类型。这个问题可能会导致编译错误或运行时错误。
6. 在 `rowSplit` 函数中,没有任何代码来更新 UI 控件或输出结果。在函数中计算的结果似乎也没有被使用或保存。
总之,这段代码需要进行重构和修复,以便能够正确地工作。如果你需要更具体的帮助,请提供更多的上下文和问题描述。
阅读全文