作者:三封酒可_894 | 来源:互联网 | 2023-05-18 21:38
c#接收多个Byte数组,组成Byte数组,转成图片Bitmap,中间出现丢失字节,如何保证图片完整性。我目前做的是下位机与上位机通信,下位机采用GPRS传输图片到上位机,但是每次只能传输1K
c#接收多个Byte数组,组成Byte数组,转成图片Bitmap,中间出现丢失字节,如何保证图片完整性。
我目前做的是下位机与上位机通信,下位机采用GPRS传输图片到上位机,但是每次只能传输1K,
图片大于1K,分多次发送到上位机,当上位机与下位机通讯时,如果中间过程中导致其中一次传输不正确,上位机如何处理才能把图片正常显示出来。也就是说Byte数组转成图片(Bitmap)过程中,Byte数组中一部分丢失了。如何补充上,利用Bitmap转成图片时候显示正常。
10 个解决方案
@jiangfling 在这方面已经考虑了。 如果丢失的位数不多,是不是可以通过补充做到呢?
通过的是GPRS传输,本身存在误码率。
目前我设计的是 发送中存在丢失情况,再次交互重新发送。
我是想 , 如果中间丢失了部分字节的话, 是否可以把丢失的字节默认补充上,这样是否可以呢?
如果补充上的话,能否做到,丢失的字节转成图片是不正常的,其他的是正常的;图片显示只有部分(丢失的字节)是不正常的。这样可以做到吗?
下位机在给上位机发数据之前,可以先发个较短的包,告诉上位机总长度,这样上位机就知道下位机会分几次发送上来
每次发送的数据前面加个包的标识,告诉上位机byte数组的偏移量.
这样上位机起码不会将图片错位了.
最后就是没有数据的部分都显示为白色就好啦.
而且上位机在接到下位机总长度后,可以事先定义好byte数组并直接显示一张空白图片
下位机发送一部分,上位机就更新一部分
这样在用户看来图片是一直都有变化,不会在那里空等,也能知道进度
如果这部分图片已经能满足他观察的需求,他也可以选择终止图片的显示,不用每次都收到完整的图片才能看.
出错的包可以选择等剩下的包都接收到了之后才发送,不要老卡在同一个地方.
已经放弃图片处理的过程。
做好交互,和补发等工作,可以有效避免这类问题。
结贴。