开启左侧

怎么序列化HObject?

[复制链接]
zhhuaq 发表于 2017-9-6 10:13:22 | 显示全部楼层 |阅读模式
本帖最后由 zhhuaq 于 2017-10-15 18:24 编辑

MFC/Halcon 12. 0中 HTuple * m_pModelID  这个是模版ID

HObject * m_pRegion  
这2种情况怎么用CArchive & ar 序列化保存? 读取?

Criss 发表于 2017-9-6 11:00:18 | 显示全部楼层
模板ID只是一个句柄而已,它代表的是一个 *.shm文件的句柄,如果没有这个文件,你给他赋值为0或者1也没有用,所以没有必要序列化这个对象,也没有意义吧?
Hobject类型的区域是图形数据,他代表的一串游程编码,本身存为*.reg类型的也是没有问题的。为嘛还需要进行序列化存储?序列化后也是文件存在硬盘中,楼主这么做的实际指导意义是什么呢?
 楼主| zhhuaq 发表于 2017-9-6 11:56:12 | 显示全部楼层
51Halcon 发表于 2017-9-6 11:00
模板ID只是一个句柄而已,它代表的是一个 *.shm文件的句柄,如果没有这个文件,你给他赋值为0或者1也没有用 ...

我想把调试工具的参数与Htuple与object一起序列化,这样可以方便多文件切换
Criss 发表于 2017-9-6 14:24:37 | 显示全部楼层
zhhuaq 发表于 2017-9-6 11:56
我想把调试工具的参数与Htuple与object一起序列化,这样可以方便多文件切换 ...

保存起来读取就可以切换了!
 楼主| zhhuaq 发表于 2017-9-6 15:57:59 | 显示全部楼层
保存:
                if (m_pModelID)
                {
                        ar << 1;
                        WriteShapeModel(*m_pModelID, "C:\\temp.shm");

                        CFile rFile2(L"C:\\temp.shm", CFile::modeRead);
                        int nn = rFile2.GetLength();
                        char * buff = new char[nn];
                        int nLen = rFile2.Read(buff, nn);
                        ar << nLen;
                        ar.Write(buff, nLen);
                        delete[] buff;
                        rFile2.Close();               
                }
                else
                {
                        ar << 0;
                }

读取:
                int nExist;
                ar >> nExist;
                if (nExist)
                {
                        int nn = 0;
                        ar >> nn;
                        char * buff = new char[nn];
                        ar.Read(buff, nn);
                        CFile rFile2(L"C:\\temp.shm", CFile::modeCreate|CFile::modeWrite);               
                        rFile2.Write(buff, nn);
                        delete[] buff;
                        rFile2.Close();

                        ReadShapeModel("C:\\temp.shm", m_pModelID);
                }
Criss 发表于 2018-1-24 17:20:19 | 显示全部楼层
序列化图像(Halcon 12.0.3测试):
  1. read_image (Image, 'fabrik')
  2. *序列化图像为句柄
  3. serialize_image (Image, SerializedItemHandle)
  4. open_file ('G:/1.dat', 'output_binary', FileHandle)
  5. *保存序列化图像句柄
  6. fwrite_serialized_item (FileHandle, SerializedItemHandle)
  7. close_file (FileHandle)

  8. open_file ('G:/1.dat', 'input_binary', FileHandle)
  9. *读取图像反序列化句柄
  10. fread_serialized_item (FileHandle, SerializedItemHandle1)
  11. *根据句柄还原图像
  12. deserialize_image (Image1, SerializedItemHandle1)
  13. close_file (FileHandle)
复制代码


tystq 发表于 2019-4-3 15:16:44 | 显示全部楼层
Criss 发表于 2018-1-24 17:20
序列化图像(Halcon 12.0.3测试):

你这个是halcon的序列化方法,C# 下直接用HImage对象序列化HObject
,也就是直接BinaryFormatter序列化即可
HShapeModel对象可以序列化ModelID
jasoncao 发表于 2020-1-6 07:04:40 | 显示全部楼层
您好请问我需要多个类遍历存储,需要标记每个类需要序列化的变量,含htuple和匹配模板等一起,请问c#自带的序列化方法是否可以序列化和反序列化回来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表