一种BMP图片修复方法及装置制造方法及图纸

技术编号:27033064 阅读:26 留言:0更新日期:2021-01-12 11:16
本发明专利技术涉及一种BMP图片修复方法及装置,其中,方法包括以下步骤:S1.从参照BMP图片文件获取损坏BMP图片文件的信息;S2.自判断获取第一个参照行的数据;S3.逐行修复;S4.损失数据填充;S5.生成BMP图片文件。该方法扩展了图片修复的方式以及开创了RGB裸流像素数据修复的先例,是对图片乃至视频修复算法的补充,具有重大创新性和实际意义。

【技术实现步骤摘要】
一种BMP图片修复方法及装置
本专利技术涉及图片文件修复技术,具体地涉及一种基于颜色渐变原理的BMP图片修复方法及装置。
技术介绍
BMP是windows操作系统上的标准图像文件格式,被多种windows应用程序所支持。如今已经发展成一种比较通用的图像文件格式。在数字图像领域上应用极为广泛,比如手机拍照,聊天中的图像传递,截图等都可能使用到BMP格式。日常使用中的意外情况如网络传递中的心跳包丢失,设备故障,文件系统损坏等原因,常常导致BMP格式的图片损坏。由于BMP的图像数据是RGB裸流,对BMP图像修复存在巨大困难。现在国内外尚未发现有软件支持对BMP格式图像文件修复。当文件部分数据丢失后,需要对正常数据提取以及对损坏数据修补,而裸流数据因为没有通用的数据格式,很难准确定位损坏位置的数据,导致BMP格式的完美图像修复极其困难。用户虽然可以手动在BMP格式的图像文件末尾填充数据使图片得以打开,但是图片却会出现严重变形,色彩改变等问题。
技术实现思路
本专利技术旨在提供一种基于颜色渐变原理的BMP图片修复方法及装置,以解决上述问题。为此,本专利技术采用的具体技术方案如下:根据本专利技术的一方面,提供了一种BMP图片修复方法,其包括以下步骤:S1.从参照BMP图片文件获取损坏BMP图片文件的信息,具体过程如下:S11.从参照BMP图片判断是否存在调色板,若是,则进入S12;若否,则跳转至S15;S12.扫描损坏BMP图片,判断调色板是否损坏,若是,则进入S13,否则跳转至S15;S13.判断是否为单色位图,若是,则进入S14,否则修复失败,结束修复;S14.设定单色位图调色板为黑白亮色;S15.从参照BMP图片文件获取图片的行像素点和列像素点,并生成损坏BMP图片的头部信息;S16.读取损坏BMP图片文件,准备进行文件修复,判断是否只是文件头部损坏,若是,跳转至S5;否则进入S2;S2.自判断获取第一个参照行的数据,具体过程如下:S21.从数据池D中连续获取一行像素所需字节数,记为L1,其中,数据池D={D1,D2,D3,…,Dn}为损坏BMP图片的RGB数据;S22.该BMP的行数据是否有数据对齐填充0,若是,则进入S23,否则跳转至S26;S23.判断L1末尾填充的0的字节数与对齐数据是否一致,若是,设定为损坏BMP图片文件的参考行RL,并跳转至S3,否则进入S24;S24.丢弃一个字节,并使W=W+1,W是否大于T的A%,若是,修复失败,结束全部流程;否则将剩余数据放回数据池D中,进入S25,其中W为修复过程丢弃的无效字节数,T为损坏BMP图片文件所需的字数总数,50<A<100;S25.数据池D的数据是否大于一行像素所需的数据量,若是,跳转至S21,否则修复失败,结束全部流程;S26.从数据池D中再获取一行像素所需数据,记为L2;S27.将L1与L2进逐个像素点对比,判断相似像素点是否超过90%,若是,设定为RL并将L1与L2放入集合L中,并跳转至S3,否则跳转至S24,其中,集合L={L1,L2,L3,…,Ln}为损坏BMP图片的已修复行数据集合;S3.逐行修复,具体过程如下:S31.数据池D的数据是否大于一行像素所需的数据量,若是,则进入S32,否则跳转到S4;S32.从数据池D中连续获取一行像素所需字节数,记为Li;S33.将Li与RL进行逐个像素点对比,判断相似像素点是否超过90%,若是,将Li放入集合L中,并将Li作为RL,跳转至S31,否则跳转至S34;S34.丢弃一个字节,并使W=W+1,W是否大于T的A%,若是,修复失败,结束全部流程,否则将剩余数据放回数据池D中,并进入S35;S35.当前无法与参照行RL相似的数据量是否大于3倍行像素所需数据量,若是,跳转至S2,重新选定参照行RL,否则跳转到S31;S4.损失数据填充,具体过程如下:S41.计算集合L中所有行的像素的数据总量,判断是否大于T的B%,若是,则进入S42;否则修复失败,结束全部流程;S42.计算集合L中所有行的像素的数据总量与T的数据差,生成相应数据量的空白行并放入集合L中,进入S5;S5.生成BMP图片文件,具体过程如下:S51.调整BMP头部信息,使其与集合L相匹配;S52.生成修复BMP图片文件。进一步地,A=60。进一步地,B=40。进一步地,S16中的判断是否只是文件头部损坏的具体过程为:获取参照BMP图片文件的头部长度HeaderLen,从损坏BMP图片文件中读取HeaderLen的数据量放入容器T中,若参照BMP图片为24位真彩图,持续从容器T末尾取出一个字节,直到取出的字节为0或者容器T的数据全部被取完;若参考图片不是24位真彩图,持续从容器T末尾取出一个字节,直到取出的字节为0xff或者容器T的数据全部被取完;此时容器T剩余的字节数为RemindLen,判断损坏BMP图片文件的大小+HeaderLen–RemindLen是否等于参照BMP图片文件大小,若是,则判定为只是文件头部损坏。根据本专利技术的另一方面,提供了一种BMP图片修复装置,其包括:第一模块,用于从参照BMP图片文件获取损坏BMP图片文件的信息,具体过程如下:S11.从参照BMP图片判断是否存在调色板,若是,则进入S12,若否,则跳转至S15;S12.扫描损坏BMP图片,判断调色板是否损坏,若是,则进入S13,否则跳转至S15;S13.判断是否为单色位图,若是,则进入S14,否则修复失败,结束修复;S14.设定单色位图调色板为黑白亮色;S15.从参照BMP图片文件获取图片的行像素点和列像素点,并生成损坏BMP图片的头部信息;S16.读取损坏BMP图片文件,准备进行文件修复,判断是否只是文件头部损坏,若是,跳转至S5,否则进入第二模块;第二模块,用于自判断获取第一个参照行的数据,具体过程如下:S21.从数据池D中连续获取一行像素所需字节数,记为L1,其中,数据池D={D1,D2,D3,…,Dn}为损坏BMP图片的RGB数据;S22.该BMP的行数据是否有数据对齐填充0,若是,则进入S23,否则跳转至S26;S23.判断L1末尾填充的0的字节数与对齐数据是否一致,若是,设定为损坏BMP图片文件的参考行RL,并跳转至第三模块;否则进入S24;S24.丢弃一个字节,并使W=W+1,W是否大于T的A%,若是,修复失败,结束全部流程;否则将剩余数据放回数据池D中,进入S25,其中W为修复过程丢弃的无效字节数,T为损坏BMP图片文件所需的字数总数,50<A<100;S25.数据池D的数据是否大于一行像素所需的数据量,若是,跳转至S21,否则修复失败,结束全部流程;S26.从数据池D中再获取一行像素所需数据,记为L本文档来自技高网...

【技术保护点】
1.一种BMP图片修复方法,其特征在于,包括以下步骤:/nS1.从参照BMP图片文件获取损坏BMP图片文件的信息,具体过程如下:/nS11.从参照BMP图片判断是否存在调色板,若是,则进入S12;若否,则跳转至S15;/nS12.扫描损坏BMP图片,判断调色板是否损坏,若是,则进入S13,否则跳转至S15;/nS13.判断是否为单色位图,若是,则进入S14,否则修复失败,结束修复;/nS14.设定单色位图调色板为黑白亮色;/nS15.从参照BMP图片文件获取图片的行像素点和列像素点,并生成损坏BMP图片的头部信息;/nS16.读取损坏BMP图片文件,准备进行文件修复,判断是否只是文件头部损坏,若是,跳转至S5;否则进入S2;/nS2.自判断获取第一个参照行的数据,具体过程如下:/nS21.从数据池D中连续获取一行像素所需字节数,记为L1,其中,数据池D={D

【技术特征摘要】
1.一种BMP图片修复方法,其特征在于,包括以下步骤:
S1.从参照BMP图片文件获取损坏BMP图片文件的信息,具体过程如下:
S11.从参照BMP图片判断是否存在调色板,若是,则进入S12;若否,则跳转至S15;
S12.扫描损坏BMP图片,判断调色板是否损坏,若是,则进入S13,否则跳转至S15;
S13.判断是否为单色位图,若是,则进入S14,否则修复失败,结束修复;
S14.设定单色位图调色板为黑白亮色;
S15.从参照BMP图片文件获取图片的行像素点和列像素点,并生成损坏BMP图片的头部信息;
S16.读取损坏BMP图片文件,准备进行文件修复,判断是否只是文件头部损坏,若是,跳转至S5;否则进入S2;
S2.自判断获取第一个参照行的数据,具体过程如下:
S21.从数据池D中连续获取一行像素所需字节数,记为L1,其中,数据池D={D1,D2,D3,…,Dn}为损坏BMP图片的RGB数据;
S22.该BMP的行数据是否有数据对齐填充0,若是,则进入S23,否则跳转至S26;
S23.判断L1末尾填充的0的字节数与对齐数据是否一致,若是,设定为损坏BMP图片文件的参考行RL,并跳转至S3,否则进入S24;
S24.丢弃一个字节,并使W=W+1,W是否大于T的A%,若是,修复失败,结束全部流程;否则将剩余数据放回数据池D中,进入S25,其中W为修复过程丢弃的无效字节数,T为损坏BMP图片文件所需的字数总数,50<A<100;
S25.数据池D的数据是否大于一行像素所需的数据量,若是,跳转至S21,否则修复失败,结束全部流程;
S26.从数据池D中再获取一行像素所需数据,记为L2;
S27.将L1与L2进逐个像素点对比,判断相似像素点是否超过90%,若是,设定为RL并将L1与L2放入集合L中,并跳转至S3,否则跳转至S24,其中,集合L={L1,L2,L3,…,Ln}为损坏BMP图片的已修复行数据集合;
S3.逐行修复,具体过程如下:
S31.数据池D的数据是否大于一行像素所需的数据量,若是,则进入S32,否则跳转到S4;
S32.从数据池D中连续获取一行像素所需字节数,记为Li;
S33.将Li与RL进行逐个像素点对比,判断相似像素点是否超过90%,若是,将Li放入集合L中,并将Li作为RL,跳转至S31,否则跳转至S34;
S34.丢弃一个字节,并使W=W+1,W是否大于T的A%,若是,修复失败,结束全部流程,否则将剩余数据放回数据池D中,并进入S35;
S35.当前无法与参照行RL相似的数据量是否大于3倍行像素所需数据量,若是,跳转至S2,重新选定参照行RL,否则跳转到S31;
S4.损失数据填充,具体过程如下:
S41.计算集合L中所有行的像素的数据总量,判断是否大于T的B%,若是,则进入S42;否则修复失败,结束全部流程;
S42.计算集合L中所有行的像素的数据总量与T的数据差,生成相应数据量的空白行并放入集合L中,进入S5;
S5.生成BMP图片文件,具体过程如下:
S51.调整BMP头部信息,使其与集合L相匹配;
S52.生成修复BMP图片文件。


2.如权利要求1所述的BMP图片修复方法,其特征在于,A=60。


3.如权利要求1所述的BMP图片修复方法,其特征在于,B=40。


4.如权利要求1所述的BMP图片修复方法,其特征在于,S16中的判断是否只是文件头部损坏的具体过程为:获取参照BMP图片文件的头部长度HeaderLen,从损坏BMP图片文件中读取HeaderLen的数据量放入容器T中,若参照BMP图片为24位真彩图,持续从容器T末尾取出一个字节,直到取出的字节为0或者容器T的数据全部被取完;若参考图片不是24位真彩图,持续从容器T末尾取出一个字节,直到取出的字节为0xff或者容器T的数据全部被取完;此时容器T剩余的字节数为RemindLen,判断损坏BMP图片文件的大小+HeaderLen–RemindLen是否等于参照BMP图片文件大小,若是,则判定为只是文件头部损坏。


5.如权利要求1所述的BMP图片修复方法,其特征在于,判断相似像素点采用对比RGB颜色相似度。


6.一种BMP图片修...

【专利技术属性】
技术研发人员:杜辉阳唐军沈长达黄志炜
申请(专利权)人:厦门市美亚柏科信息股份有限公司
类型:发明
国别省市:福建;35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1