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