Halcon Progress 20 为不同的协议(HALCON、UDP、TCP)提供了套接字,并提供了使用通用套接字通信发送任意数据的send_data(Socket, Format, Data, To)
过程。如何使用此过程将图像从 hdevelop 发送到另一个连接的套接字?
Halcon 程序化可视化解决方案指南指出以下内容:
有时可能不需要应用标准的 HALCON 可视化运算符,而是使用自编程版本。这可以通过使用为所有数据类型提供的访问函数来实现。这些示例是
get_image_pointer1
、get_region_runs
或get_contour_xld
。像这样的运算符允许完全访问所有内部数据类型。此外,它们以各种形式(例如,游程编码、点或轮廓)提供数据,以使进一步的处理更容易。基于这些数据,可以轻松开发自编程的可视化。
这是我认为应该如何工作的一个基本示例:
read_image (Image, 'printer_chip/printer_chip_01')
* Send image via socket
Protocol := 'TCP4'
Timeout := 5.0
* Open a socket connection
open_socket_connect ('127.0.0.1', 5000, ['protocol','timeout'], [Protocol,Timeout], Socket)
* To is only used with protocol HALCON or UDP (empty for bound TCP connections)
To := []
* The following send_data is working, the connected socket receives this message
send_data (Socket, 'z', ['Generic sockets are great!'], To)
* Make sure we have only one channel
rgb1_to_gray (Image, GrayImage)
get_image_pointer1 (GrayImage, Pointer, Type, Width, Height)
* get_image_pointer returns pointer of type 'byte' -> use a byte format specifier for socket
* c: one byte = 8 bit, signed
* Append the type specifier with a number for a repeat count, e.g. 'c5' means 'ccccc'
Format := 'c' + Width*Height
* Format := 'c'
* How to cast the raw pointer correctly to send the data it points to?
send_data (Socket, Format, [Pointer], [])
最后一行send_data (Socket, Format, [Pointer], [])
抛出异常:
未处理的程序异常:
在过程“主”行中调用“send_data”时 HALCON 操作员错误:78。
格式规范与数据不匹配(HALCON 错误代码:5628)
显然,这Pointer
是指向图像在内存中的位置的地址,而不是可能导致错误的实际数据。
有没有办法在 HDevelop 中正确转换原始指针以通过套接字发送它?或者这只能在使用 Halcon 库的外部 C/C++/C# 应用程序中完成?
Halcon文档gen_image_pointer1
仅提供此 C 示例:
Hobject Image;
char typ[128];
Hlong width,height;
unsigned char *ptr;
read_image(&Image,"fabrik");
get_image_pointer1(Image,(Hlong*)&ptr,typ,&width,&height);
我想使用 HDevelop 的功能,而不是使用 C/C++/C# 中的套接字(尽管这是另一种方式)。唯一缺少的是将图像从 HDevelp 中实际发送到接收套接字。