设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
71#
发表于 2005-10-14 20:53:00 | 只看该作者
哦,懂原理了。但440& * 330 - 12  改成440 * 330 - 12就不行哦,他们有区别吗
72#
 楼主| 发表于 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,也就是&标记。
73#
发表于 2005-10-14 21:49:00 | 只看该作者
哦,明白了:)。要学的太多了
74#
发表于 2005-10-14 23:31:00 | 只看该作者
ok
75#
发表于 2005-10-17 17:24:00 | 只看该作者
这句UBound(Img.PictureData) < 1064 + lenTag + 4 + lenDoc - 1 也看不懂你的图片不是这样的吗:1064+lendoc
76#
发表于 2005-10-18 06:17:00 | 只看该作者
支持!

77#
 楼主| 发表于 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位的数据长度,然后是全部的数据。
78#
发表于 2005-10-18 22: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), 43.在1065 + lenTag + 4处写入文档内容

    CopyMemory ByVal VarPtr(arrImage(1064 + lenTag + 4)), ByVal VarPtr(arrDoc(0)), lenDoc
79#
发表于 2005-10-18 23:07:00 | 只看该作者
还有12位的数据头什么时候写进去了好象没看到
80#
 楼主| 发表于 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-3 15:30 , Processed in 0.146263 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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