设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: LucasLynn
打印 上一主题 下一主题

[模块/函数] 【原创 / 源码】数据图片读写器(DataImage)(最后更新2005-09-28 15:38)

[复制链接]
11#
 楼主| 发表于 2005-9-28 06:39:00 | 显示全部楼层
以下是引用qxqjdy在2005-9-27 21:51:00的发言:












RAR打包上传,直接上传图片论坛会作中间处理,加了论坛的标记进去。
12#
 楼主| 发表于 2005-9-28 07:01:00 | 显示全部楼层
<DIV class=quote>以下是引用qxqjdy在2005-9-27 21:56:00的发言:









最新版也是这个情况。(是不是因2000版的原因?)



我在程序中加入了调试信息输出代码,你用这个附件来打开另存的图片,提示非法格式后把VBA立即窗口中输出的调试信息贴上来,我分析一下。

[此贴子已经被作者于2005-9-27 23:33:05编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
13#
 楼主| 发表于 2005-9-28 09:54:00 | 显示全部楼层
以下是引用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





不会吧,居然是调色板?晕了。
14#
 楼主| 发表于 2005-9-28 11:17:00 | 显示全部楼层
以下是引用qxqjdy在2005-9-28 1:02:00的发言:



不好意思,总挑你的毛病。本来我对你的绝大部分程式不理解,感觉太深奥,呵呵,因为我是个新手,以前也没接触过VB………,之所以支持你为的是让你出更多的精品,来让大家感受ACCESS的魅力!

下面就是立即窗口中的内容

  

做了个自动进行测试的程序,打开Access版本兼容性测试窗体后,把里面的内容复制上来,谢谢。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
15#
 楼主| 发表于 2005-9-28 23:45:00 | 显示全部楼层
再次更新,修复了在Access2000下无法打开后缀名为大写字母的数据图片的问题。

(应该说是Access2000的问题,不是我的问题……)

详细问题描述参见:

【讨论】Access2000中Image控件之怪现象

[此贴子已经被作者于2005-9-28 15:46:11编辑过]

16#
 楼主| 发表于 2005-9-29 08:40:00 | 显示全部楼层
以下是引用qxqjdy在2005-9-28 21:51:00的发言:



[em17]

问题终于解决,

接下来自己慢慢再消化。





同时也很感谢你不断地反馈,协助我完善代码,再次感谢!
17#
 楼主| 发表于 2005-10-14 19:51:00 | 显示全部楼层
以下是引用ey1001在2005-10-14 9:20:00的发言:



   下面的看不懂,怎样知道容量是440& * 330 - 12 呀

    If lenDoc > 440& * 330 - 12 Then

        MsgBox "数据超出了图片容量,无法保存!"

        Exit Sub

    End If

我做的图片就是440*330。前12个字节用于存储数据头了。
18#
 楼主| 发表于 2005-10-14 20:55:00 | 显示全部楼层
以下是引用ey1001在2005-10-14 12:53:00的发言:



哦,懂原理了。但440& * 330 - 12  改成440 * 330 - 12就不行哦,他们有区别吗

常数表达式里面,440被系统自动认定为Integer,而Integer*Integer的时候,系统使用最大的数据格式,也就是Integer来存储结果,这样会导致溢出,所以必须强制指定其中一个变量为Long,也就是&标记。
19#
 楼主| 发表于 2005-10-18 19:55:00 | 显示全部楼层
以下是引用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位的数据长度,然后是全部的数据。
20#
 楼主| 发表于 2005-10-18 23:12:00 | 显示全部楼层
以下是引用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中则不是,需要数据之外的信息来确定字符串的长度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-7 00:07 , Processed in 0.088308 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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