QT中QImage转换为Halcon的Object
1.在halcon与Qt结合开发时,需要将Qt中的图像文件转化为Halcon可以识别的图像文件Object,则需要进行图像格式的转换,一下为转换函数:
int QImageToHOjbect(QImage &image,HObject *Object)
{
if (image.format() == QImage::Format_RGB888
|| image.format() == QImage::Format_RGB32
|| image.format() == QImage::Format_Indexed8)
{
}
else
{
return -1;
}
int ret = 0;
unsigned char *image_red = nullptr;
unsigned char *image_green = nullptr;
unsigned char *image_blue = nullptr;
int r, c;
int w = image.width();
int h = image.height();
try
{
image_red = (unsigned char *)malloc(w*h);
if (image.format() == QImage::Format_RGB888
|| image.format() == QImage::Format_RGB32)
{
image_green = (unsigned char *)malloc(w*h);
image_blue = (unsigned char *)malloc(w*h);
}
}
catch (...)
{
free(image_red);
free(image_green);
free(image_blue);
return -1;
}
if (image.format() == QImage::Format_RGB888)
{
for (r = 0; r < h; r++)
{
uchar* pRow = image.scanLine(r);
for (c = 0; c < w; c++)
{
image_red[r*w + c] = pRow[3 * c + 0];
image_green[r*w + c] = pRow[3 * c + 1];
image_blue[r*w + c] = pRow[3 * c + 2];
}
}
GenImage3Extern(Object, "byte", w, h, (Hlong)image_red, (Hlong)image_green, (Hlong)image_blue, (Hlong)free);
free(image_red);free(image_green);free(image_blue);
}
else if (image.format() == QImage::Format_RGB32)
{
for (r = 0; r < h; r++)
{
uchar* pRow = image.scanLine(r);
for (c = 0; c < w; c++)
{
image_red[r*w + c] = pRow[4 * c + 2];
image_green[r*w + c] = pRow[4 * c + 1];
image_blue[r*w + c] = pRow[4 * c + 0];
}
}
GenImage3Extern(Object, "byte", w, h, (Hlong)image_red, (Hlong)image_green, (Hlong)image_blue, (Hlong)free);
}
else if(image.format() == QImage::Format_Indexed8)
{
for (r = 0; r < h; r++)
{
uchar* pRow = image.scanLine(r);
for (c = 0; c < w; c++)
{
image_red[r*w + c] = pRow[c];
//image_red[r*w + c] = 0.30 * pBmp[3 * (c + r*w) + 0] + 0.59 * pBmp[3 * (c + r*w) + 1] + 0.11 *pBmp[3 * (c + r*w) + 2];
}
}
GenImage1Extern(Object, "byte", w, h, (Hlong)image_red, (Hlong)free);
}
return ret;
}