Office中国论坛/Access中国论坛
标题: 【原创 / 源码】数据图片读写器(DataImage)(最后更新2005-09-28 15:38) [打印本页]
作者: LucasLynn 时间: 2005-9-25 07:30
标题: 【原创 / 源码】数据图片读写器(DataImage)(最后更新2005-09-28 15:38)
名称:数据图片读写器(DataImage)
介绍:
无聊的时候顺手写着玩的,一个使用图片来保存数据的小程序,你可以使用这个工具读取程序自带的数据图片,也可以编辑、新建数据图片。功能完整。
程序使用440×330像素,256色BMP图片格式,能够保存的最大字符数量为(440×330-12)÷2=72594(默认设定),图形数据前1064位不变更(40位BMP信息头,1024位调色板),从第1065位开始,先是存储一个文件格式标记(以判别是否程序所创建的数据图片),格式标记可以在窗体的常量中自行定义,以做到和别人的数据图片格式不兼容,接着是4位的数据长度,然后是全部的数据。
由于数据全部存储在BMP像素段,因此BMP结构完好,可以用任何图形编辑/浏览软件正常打开,而且由于BMP的扫描行从下到上,BMP图形本身就是一个最好的容量显示器。
附件包含:
1、数据图片读写器。
2、独立的数据图片读取模块,你可以在自己的程序中读取使用读写器制作的数据图片的公共模块DataImageAccess。只需导入这个独立模块,并调用biRead函数,即可读出你隐藏在窗体图片中的数据。
3、数据图片读取模块使用范例。
4、小说《风云》第一部《惊世少年》和第二部《搜神记》的全部章节,可用读写器来打开阅读。
[attach]13327[/attach]
下载:(最后更新2005年9月28日15:38)
更新:
1、2005年9月28日,修正了Access 2000下文件后缀名大小写导致的无法打开文件问题。
[此贴子已经被作者于2006-7-13 9:12:59编辑过]
作者: ui 时间: 2005-9-25 07:36
good!
作者: qxqjdy 时间: 2005-9-25 08:01
“电”脑 I 服 YOU 了。
作者: jxq 时间: 2005-9-25 08:44
[em06]
作者: HIGHOK 时间: 2005-9-25 10:55
ok
作者: nisg 时间: 2005-9-25 17:47
'lll
作者: yiwuhome 时间: 2005-9-25 18:13
aa
作者: esmile 时间: 2005-9-26 01:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: lanchong 时间: 2005-9-26 01:54
看看
作者: dhwx 时间: 2005-9-26 03:47
ok
作者: accessone1 时间: 2005-9-26 04:20
excellent,i love you!
作者: qxqjdy 时间: 2005-9-26 06:04
标题: 出现错误!
如图[attach]13331[/attach]
作者: LucasLynn 时间: 2005-9-26 06:09
以下是引用qxqjdy在2005-9-25 22:04:00的发言:
如图
多谢反馈,我立即检查。
作者: LucasLynn 时间: 2005-9-26 06:29
请问是什么情况、操作下引起这个错误的?
如果你打开了图片,文本框不可能还是灰色的,应该是可以编辑的白色。
还是你改动过什么了?
[此贴子已经被作者于2005-9-25 22:32:28编辑过]
作者: qxqjdy 时间: 2005-9-26 07:14
打开窗体后,点击按扭全部提示错误,
上面截的图是点击第二个按扭(打开数据图片),在选定你提供的图片后出现的提示。
至于文本框的小说内容在我在点击提示内的“结束”后的结果。
[此贴子已经被作者于2005-9-25 23:23:48编辑过]
作者: LucasLynn 时间: 2005-9-26 08:02
以下是引用qxqjdy在2005-9-25 23:14:00的发言:
打开窗体后,点击按扭全部提示错误,
上面截的图是点击第二个按扭(打开数据图片),在选定你提供的图片后出现的提示。
至于文本框的小说内容在我在点击提示内的“结束”后的结果。
你的Access什么版本?
我更改了代码的几个地方,重新上传了附件,你再看看。
另外,如果还出错,每个按钮的错误信息麻烦告诉我,谢谢。
[此贴子已经被作者于2005-9-26 0:09:56编辑过]
作者: eio 时间: 2005-9-26 08:58
see
作者: qxqjdy 时间: 2005-9-26 09:14
标题: 好神速
我用的是2000
可以打开你预定的图片。但新建图片数据后再打开提示“文件不是合法的数据图片格式”[attach]13335[/attach]
作者: LucasLynn 时间: 2005-9-26 10:30
以下是引用qxqjdy在2005-9-26 1:14:00的发言:
我用的是2000
可以打开你预定的图片。但新建图片数据后再打开提示“文件不是合法的数据图片格式”
应该是版本问题,我是用2003做的,可能需要做些改动。
新建了保存,然后打开你自己保存的文件?还是新建后直接打开自带的图片?
如果新建了以后保存,但是无法打开,把保存的图片附件上来,我看一下。
另外打开一张自带图片,然后另存试试,看看另存的图片能不能再次打开。
我在程序里面加了一些错误信息提示,你用这个程序来重复一下你遇到的这个错误,然后把对话框里面的信息告诉我。
[attach]13336[/attach]
[此贴子已经被作者于2005-9-26 3:16:40编辑过]
作者: 陈大林 时间: 2005-9-26 16:06
good
作者: dasen 时间: 2005-9-26 16:13
好[em01]
作者: tonywong 时间: 2005-9-26 17:26
cool
作者: ey1001 时间: 2005-9-26 17:34
1
作者: 李寻欢 时间: 2005-9-26 18:49
好东西要顶一下
作者: CHENZHIRONG 时间: 2005-9-26 21:37
可用于保存一些敏感的数据。
作者: LucasLynn 时间: 2005-9-26 21:49
以下是引用CHENZHIRONG在2005-9-26 13:37:00的发言:
可用于保存一些敏感的数据。
可以自己修改一下窗体中的全局标记变量,用自己的标记来替代默认标记,这样别人用这个程序就无法打开你的数据图片了。
当然,防君子不防小人的,别指望有太高的安全性,匆匆完成,没使用任何的加密技术,对于高手还是很容易破解的。
作者: CHENZHIRONG 时间: 2005-9-26 22:01
当然,我只是说保存敏感的数据,并不是保密的数据。如果要保密,直接加密好了。
作者: LucasLynn 时间: 2005-9-26 22:48
以下是引用CHENZHIRONG在2005-9-26 14:01:00的发言:
当然,我只是说保存敏感的数据,并不是保密的数据。如果要保密,直接加密好了。
好像少个在自己程序中读取数据图片数据的公共模块,我这就补上。
作者: LucasLynn 时间: 2005-9-26 22:58
再次更新了发布的文件,更改如下:1、修正了若干个BUG。
2、新增了一个独立的数据图片读取模块DataImageAccess,你可以在自己的程序中单独导入这个模块,并调用biRead函数,来读取你嵌入在自己窗体中的、使用读写器创建的数据图片中的数据。
作者: qxqjdy 时间: 2005-9-27 06:35
标题: 又作一次测试
1、点击“打开数据图片”,修改文本内容“保存数据图片”可以正常再打开。
如作“另存”则无法打开。(以上均是对自带图片的操作)
2、新建数据图片也会出现同样的错误。
附图
不知描述清没有?
[attach]13354[/attach]
作者: herogates 时间: 2005-9-27 18:43
如果能用就安逸了。
作者: LucasLynn 时间: 2005-9-27 19:34
以下是引用qxqjdy在2005-9-26 22:35:00的发言:
1、点击“打开数据图片”,修改文本内容“保存数据图片”可以正常再打开。
如作“另存”则无法打开。(以上均是对自带图片的操作)
2、新建数据图片也会出现同样的错误。
附图
不知描述清没有?

能不能麻烦你附一张无法打开的数据图片上来,我分析一下图片数据,找找原因。
另外,我又修正了几个BUG,你可以试试最后发布的版本。
[此贴子已经被作者于2005-9-27 11:37:48编辑过]
作者: 阿智 时间: 2005-9-28 01:51
T
作者: qxqjdy 时间: 2005-9-28 05:51
标题: 上传无法打开的数据图片
[attach]13370[/attach]
[attach]13371[/attach]
cf
作者: qxqjdy 时间: 2005-9-28 05:56
标题: 上传无法打开的数据图片
以下是引用LucasLynn在2005-9-27 11:34:00的发言:
能不能麻烦你附一张无法打开的数据图片上来,我分析一下图片数据,找找原因。
另外,我又修正了几个BUG,你可以试试最后发布的版
最新版也是这个情况。(是不是因2000版的原因?)
[attach]13372[/attach]
[attach]13373[/attach]
另外还有一件事麻烦楼主。
能不能再讲讲APICopyMemory
作者: 灵芝 时间: 2005-9-28 06:18
学习
作者: LucasLynn 时间: 2005-9-28 06:21
以下是引用qxqjdy在2005-9-27 21:56:00的发言:
最新版也是这个情况。(是不是因2000版的原因?)
另外还有一件事麻烦楼主。
能不能再讲讲APICopyMemory
应该是的,可能我代码中有些部分使用了2003的特性,和2000不兼容,等我看看图片分析一下。
CopyMemory其实是个很简单的函数,但是功能非常强大。三个参数分别是目标内存地址,来源内存地址,复制长度,功能就是成段复制数据。速度极快。
作者: LucasLynn 时间: 2005-9-28 06:39
以下是引用qxqjdy在2005-9-27 21:51:00的发言:

[attach]13371[/attach]
RAR打包上传,直接上传图片论坛会作中间处理,加了论坛的标记进去。
作者: zxcnet 时间: 2005-9-28 06:50
看看
作者: LucasLynn 时间: 2005-9-28 07:01
<DIV class=quote>以下是引用qxqjdy在2005-9-27 21:56:00的发言:
最新版也是这个情况。(是不是因2000版的原因?)
[attach]13375[/attach]
我在程序中加入了调试信息输出代码,你用这个附件来打开另存的图片,提示非法格式后把VBA立即窗口中输出的调试信息贴上来,我分析一下。
[此贴子已经被作者于2005-9-27 23:33:05编辑过]
作者: jxla 时间: 2005-9-28 08:14
[em06]
作者: qxqjdy 时间: 2005-9-28 09:02
不好意思,总挑你的毛病。本来我对你的绝大部分程式不理解,感觉太深奥,呵呵,因为我是个新手,以前也没接触过VB………,之所以支持你为的是让你出更多的精品,来让大家感受ACCESS的魅力!
下面就是立即窗口中的内容
lenTag= 8
strTag=数据图片
lenDoc= 108124
0H8947F480: 70 65 6E 63 FE 56 47 72 5C A6 01 00 CE 98 91 4E
0H8947F580: B7 00 CA 60 16 4E 11 5C 74 5E 20 00 0D 00 0A 00
0H8947F680: 2C 7B 5D 4E E0 7A 00 30 5E 79 54 9B 1A 4F 0D 00
0H8947F780: 0A 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
0H8947F880: 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
0H8947F980: 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
0H8947FA80: 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
0H8947FB80: 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
lenTag= 8
strTag=??à?
lenDoc= 12583136
0HC3476780: A0 00 80 E0 C0 00 80 E0 E0 00 C0 00 00 00 C0 00
0HC3476880: 20 00 C0 00 40 00 C0 00 60 00 C0 00 80 00 C0 00
0HC3476980: A0 00 C0 00 C0 00 C0 00 E0 00 C0 20 00 00 C0 20
0HC3476A80: 20 00 C0 20 40 00 C0 20 60 00 C0 20 80 00 C0 20
0HC3476B80: A0 00 C0 20 C0 00 C0 20 E0 00 C0 40 00 00 C0 40
0HC3476C80: 20 00 C0 40 40 00 C0 40 60 00 C0 40 80 00 C0 40
0HC3476D80: A0 00 C0 40 C0 00 C0 40 E0 00 C0 60 00 00 C0 60
0HC3476E80: 20 00 C0 60 40 00 C0 60 60 00 C0 60 80 00 C0 60
[此贴子已经被作者于2005-9-28 1:06:42编辑过]
作者: LucasLynn 时间: 2005-9-28 09:54
以下是引用qxqjdy在2005-9-28 1:02:00的发言:
不好意思,总挑你的毛病。本来我对你的绝大部分程式不理解,感觉太深奥,呵呵,因为我是个新手,以前也没接触过VB………,之所以支持你为的是让你出更多的精品,来让大家感受ACCESS的魅力!
下面就是立即窗口中的内容
lenTag= 8
strTag=数据图片
lenDoc= 108124
0H8947F480: 70 65 6E 63 FE 56 47 72 5C A6 01 00 CE 98 91 4E
0H8947F580: B7 00 CA 60 16 4E 11 5C 74 5E 20 00 0D 00 0A 00
0H8947F680: 2C 7B 5D 4E E0 7A 00 30 5E 79 54 9B 1A 4F 0D 00
0H8947F780: 0A 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
0H8947F880: 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
0H8947F980: 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
0H8947FA80: 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
0H8947FB80: 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00 2D 00
lenTag= 8
strTag=??à?
lenDoc= 12583136
0HC3476780: A0 00 80 E0 C0 00 80 E0 E0 00 C0 00 00 00 C0 00
0HC3476880: 20 00 C0 00 40 00 C0 00 60 00 C0 00 80 00 C0 00
0HC3476980: A0 00 C0 00 C0 00 C0 00 E0 00 C0 20 00 00 C0 20
0HC3476A80: 20 00 C0 20 40 00 C0 20 60 00 C0 20 80 00 C0 20
0HC3476B80: A0 00 C0 20 C0 00 C0 20 E0 00 C0 40 00 00 C0 40
0HC3476C80: 20 00 C0 40 40 00 C0 40 60 00 C0 40 80 00 C0 40
0HC3476D80: A0 00 C0 40 C0 00 C0 40 E0 00 C0 60 00 00 C0 60
0HC3476E80: 20 00 C0 60 40 00 C0 60 60 00 C0 60 80 00 C0 60
不会吧,居然是调色板?晕了。
作者: LucasLynn 时间: 2005-9-28 11:17
以下是引用qxqjdy在2005-9-28 1:02:00的发言:
不好意思,总挑你的毛病。本来我对你的绝大部分程式不理解,感觉太深奥,呵呵,因为我是个新手,以前也没接触过VB………,之所以支持你为的是让你出更多的精品,来让大家感受ACCESS的魅力!
下面就是立即窗口中的内容
做了个自动进行测试的程序,打开Access版本兼容性测试窗体后,把里面的内容复制上来,谢谢。
[attach]13376[/attach]
作者: czj918 时间: 2005-9-28 16:12
good
作者: LucasLynn 时间: 2005-9-28 23:45
再次更新,修复了在Access2000下无法打开后缀名为大写字母的数据图片的问题。
(应该说是Access2000的问题,不是我的问题……)
详细问题描述参见:
【讨论】Access2000中Image控件之怪现象
[此贴子已经被作者于2005-9-28 15:46:11编辑过]
作者: qxqjdy 时间: 2005-9-29 05:51
[em17]问题终于解决,接下来自己慢慢再消化。
作者: LucasLynn 时间: 2005-9-29 08:40
以下是引用qxqjdy在2005-9-28 21:51:00的发言:
[em17]
问题终于解决,
接下来自己慢慢再消化。
同时也很感谢你不断地反馈,协助我完善代码,再次感谢!
作者: tmtony 时间: 2005-9-29 08:49
好程序 好命名 好小说 好贴
作者: lirongwu 时间: 2005-9-29 16:33
okokok!!!
作者: tim2004 时间: 2005-9-30 02:09
dd
作者: zyp 时间: 2005-9-30 06:18
谢谢分享
作者: 星辉 时间: 2005-9-30 21:09
我要
作者: 1231588 时间: 2005-10-1 07:46
厉害
作者: KAKAJP 时间: 2005-10-7 02:33
0k
作者: wjb5645 时间: 2005-10-7 08:38
[em09]
作者: kunlun 时间: 2005-10-7 17:40
服了you
作者: zhoulin0718 时间: 2005-10-7 22:58
look
作者: binuochao 时间: 2005-10-7 23:10
ding
作者: hrawea 时间: 2005-10-8 00:33
太好了。
作者: wdq 时间: 2005-10-8 04:55
看看
作者: XWQ2000 时间: 2005-10-8 19:27
ok
作者: hmilkhmily 时间: 2005-10-8 20:02
good
作者: zwl01 时间: 2005-10-9 18:28
ok
作者: Cjng.T 时间: 2005-10-9 19:53
不明白 先下过来 研究 研究
作者: Cjng.T 时间: 2005-10-9 19:53
不明白 下过来 研究 研究
作者: 小小鸟 时间: 2005-10-9 23:38
顶!
作者: gfxdlg 时间: 2005-10-10 18:09
VB高手
作者: ey1001 时间: 2005-10-14 17:20
下面的看不懂,怎样知道容量是440& * 330 - 12 呀 If lenDoc > 440& * 330 - 12 Then
MsgBox "数据超出了图片容量,无法保存!"
Exit Sub
End If
作者: LucasLynn 时间: 2005-10-14 19:51
以下是引用ey1001在2005-10-14 9:20:00的发言:
下面的看不懂,怎样知道容量是440& * 330 - 12 呀
If lenDoc > 440& * 330 - 12 Then
MsgBox "数据超出了图片容量,无法保存!"
Exit Sub
End If
我做的图片就是440*330。前12个字节用于存储数据头了。
作者: ey1001 时间: 2005-10-14 20:53
哦,懂原理了。但440& * 330 - 12 改成440 * 330 - 12就不行哦,他们有区别吗
作者: LucasLynn 时间: 2005-10-14 20:55
以下是引用ey1001在2005-10-14 12:53:00的发言:
哦,懂原理了。但440& * 330 - 12 改成440 * 330 - 12就不行哦,他们有区别吗
常数表达式里面,440被系统自动认定为Integer,而Integer*Integer的时候,系统使用最大的数据格式,也就是Integer来存储结果,这样会导致溢出,所以必须强制指定其中一个变量为Long,也就是&标记。
作者: ey1001 时间: 2005-10-14 21:49
哦,明白了:)。要学的太多了
作者: ww 时间: 2005-10-14 23:31
ok
作者: ey1001 时间: 2005-10-17 17:24
这句UBound(Img.PictureData) < 1064 + lenTag + 4 + lenDoc - 1 也看不懂你的图片不是这样的吗:1064+lendoc
作者: ousa 时间: 2005-10-18 06:17
支持!
作者: LucasLynn 时间: 2005-10-18 19:55
以下是引用ey1001在2005-10-17 9:24:00的发言:
这句UBound(Img.PictureData) < 1064 + lenTag + 4 + lenDoc - 1 也看不懂
你的图片不是这样的吗:1064+lendoc
程序使用440×330像素,256色BMP图片格式,能够保存的最大字符数量为(440×330-12)÷2=72594(默认设定),图形数据前1064位不变更(40位BMP信息头,1024位调色板),从第1065位开始,先是存储一个文件格式标记(以判别是否程序所创建的数据图片),格式标记可以在窗体的常量中自行定义,以做到和别人的数据图片格式不兼容,接着是4位的数据长度,然后是全部的数据。
作者: ey1001 时间: 2005-10-18 22:51
LucasLynn,非常感谢你不厌其烦的解答.恕在下愚钝,还是不是很清楚哦,看下面的理解是否对.谢谢1.先在1065处写入lentag长的格式标志CopyMemory ByVal VarPtr(arrImage(1064)), ByVal VarPtr(arrTag(0)), lenTag
2. 在1065 + lenTag处写入4位文档大小 -----这个是不是可有可无呀CopyMemory ByVal VarPtr(arrImage(1064 + lenTag)), ByVal VarPtr(lenDoc), 43.在1065 + lenTag + 4处写入文档内容
CopyMemory ByVal VarPtr(arrImage(1064 + lenTag + 4)), ByVal VarPtr(arrDoc(0)), lenDoc
作者: ey1001 时间: 2005-10-18 23:07
还有12位的数据头什么时候写进去了好象没看到
作者: LucasLynn 时间: 2005-10-18 23:12
以下是引用ey1001在2005-10-18 14:51:00的发言:
LucasLynn,非常感谢你不厌其烦的解答.恕在下愚钝,还是不是很清楚哦,看下面的理解是否对.谢谢
1.先在1065处写入lentag长的格式标志
CopyMemory ByVal VarPtr(arrImage(1064)), ByVal VarPtr(arrTag(0)), lenTag
2. 在1065 + lenTag处写入4位文档大小 -----这个是不是可有可无呀
CopyMemory ByVal VarPtr(arrImage(1064 + lenTag)), ByVal VarPtr(lenDoc), 4
3.在1065 + lenTag + 4处写入文档内容
CopyMemory ByVal VarPtr(arrImage(1064 + lenTag + 4)), ByVal VarPtr(arrDoc(0)), lenDoc
不是,VB的字符串和C的不同,C本身数据中使用Chr(0)来标识字符串结束,但是VB中则不是,需要数据之外的信息来确定字符串的长度。
作者: ey1001 时间: 2005-10-19 01:41
明白了,写入文档大小就是方便以后读取需要。但是lenDoc > 440& * 330 - 12 中的前12位的文件头还是没有看到你何时写入了呀是lentag吗
作者: jzwwpp 时间: 2005-10-19 02:52
牛!!!
作者: laomao 时间: 2005-10-19 06:20
看一看
作者: lgslv 时间: 2005-11-13 20:40
谢谢
作者: zerosailing 时间: 2005-11-20 07:23
好啊!
作者: 82077802 时间: 2005-11-23 21:19
[em01][em02]
作者: 120HYH 时间: 2005-11-25 01:23
I 服 YOU 了
作者: 小漆 时间: 2005-11-26 00:33
高手
我在找BMP的数据结构说明,找了几个小时,没找到,郁闷
作者: fan0217 时间: 2005-11-26 00:41
先看看
作者: 大声笑 时间: 2005-11-28 23:29
[em01]
作者: ds_lsl 时间: 2006-1-21 08:27
KANKAN
作者: fangzh 时间: 2006-1-26 06:40
看看如何
作者: vskz2000 时间: 2006-1-26 08:43
kankan
作者: xjliyuehua 时间: 2006-1-27 02:48
看不了
作者: 5988143 时间: 2006-2-10 07:17
的看看
作者: yehf 时间: 2006-2-11 00:08
看看
作者: fxcxg 时间: 2006-2-16 20:28
好,我正好需要
作者: airoracle 时间: 2006-2-16 21:07
如果我也可以这么顺手写着玩就好了。
作者: fffsky21 时间: 2006-2-18 20:40
okl
作者: haroldchan 时间: 2006-2-21 18:56
ok,cool
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |