谁可以给我一个jpeg格式读取的类?

fzn0621 2003-10-20 09:43:18
我想这样:把一个JPEG格式文件全部读取到一个BYTE数组里面,然后通过一个方法,就可以爸爸这个数组里的数据解压缩(是不是要解压缩成BMP才可以显示出来的呀?我不懂,请大家多多指教!!),然后可以在某个地方显示出来..
我主要是想这些操作都在内存中实现,不要经过硬盘,因为有很多JPEG读取的类所提供的接口都只是要一个文件的地址,然后他自己做读取,自己做显示..我不希望这样,因为我准备把很多的JPEG文件合并成一个文件,然后要读取的时候只读取一部分(也就是原来的一个JPEG文件)
请大家帮我!!!
...全文
42 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyzhang 2003-10-24
  • 打赏
  • 举报
回复
如果是BMP文件可以考虑使用DIB处理....

JPG太复杂了....
fzn0621 2003-10-24
  • 打赏
  • 举报
回复
to rainstormmaster(rainstormmaster):
用CreateFileMapping创建内存文件后,只有一个文件的句柄,但像PICTUREBOX之类的控件都需要有文件的路径才能读取,怎么办呢?
rainstormmaster 2003-10-23
  • 打赏
  • 举报
回复
用api函数CreateFileMapping:

【VB声明】
Private Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName As String) As Long

【别名】
CreateFileMappingA

【说明】
创建一个新的文件映射对象

【返回值】
Long,新建文件映射对象的句柄;零意味着出错。会设置GetLastError。即使函数成功,但倘若返回的句柄属于一个现成的文件映射对象,那么GetLastError也会设置成ERROR_ALREADY_EXISTS。在这种情况下,文件映射的长度就是现有对象的长度,而不是这个函数指定的尺寸

【参数表】
hFile ---------- Long,指定欲在其中创建映射的一个文件句柄。& HFFFFFFFF& 表示在内存中创建一个文件映射

lpFileMappigAttributes - SECURITY_ATTRIBUTES,指定一个安全对象,在创建文件映射时使用。如果为NULL(用ByVal
As Long传递零),表示使用默认安全对象

flProtect ------ Long,下述常数之一:
PAGE_READONLY
以只读方式打开映射
PAGE_READWRITE
以可读、可写方式打开映射
PAGE_WRITECOPY
为写操作留下备份
可组合使用下述一个或多个常数
SEC_COMMIT
为文件映射一个小节中的所有页分配内存
SEC_IMAGE
文件是个可执行文件
SEC_RESERVE
为没有分配实际内存的一个小节保留虚拟内存空间

dwMaximumSizeHigh - Long,文件映射的最大长度(高32位)

dwMaximumSizeLow - Long,文件映射的最小长度(低32位)。如这个参数和dwMaximumSizeHigh都是零,就用磁盘文件的实际长度

lpName --------- String,指定文件映射对象的名字。如存在这个名字的一个映射,函数就会打开它。用vbNullString创建一个无名的文件映射

fzn0621 2003-10-23
  • 打赏
  • 举报
回复
因为第一写在内存中的速度比硬盘要快很多!第二频繁对硬盘操作,硬盘寿命会消耗的很快,但内存不会!!
所以我还是想用内存读取好了,毕竟是给自己写软件,不是写给别人用的,可以不考虑别人的硬件等东西。。
可以教我怎么生成一个内存文件吗? ^_^
rainstormmaster 2003-10-20
  • 打赏
  • 举报
回复
JPEG解码是很复杂的,你的问题,如果中间不想生成临时文件的话,也没必要从数组生成图象,可以考虑生成一个内存文件

//我不想再把文件写到磁盘上再让这些控件读取。太浪费硬盘了。

现在的硬盘一般都有几十G,比起用大数组浪费内存,我宁愿浪费硬盘空间,再说了,读取一个文件的内容,生成临时文件后,用完了你可以kill它呀

fzn0621 2003-10-20
  • 打赏
  • 举报
回复
不,资源文件代替不了的.;
我的意思其实是,要把多个JPEG文件的数据一个接一个或者打乱顺序的写在同一个文件内,反正只偶我自己知道怎么在读出来,我能读取这个JPEG的文件数据,但读取不来JPEG格式,很多可以显示JPEG的控件(比如VB自带的PICTUREBOX、IMAGE等)都是只支持从文件读取的,我不想再把文件写到磁盘上再让这些控件读取。太浪费硬盘了。
所以,想找一个不需经过硬盘,从内存中的数组便可以转换格式的类(其实我想这对了解JPEG格式的人来说只是一点非常简单的改动,可惜我不懂JPEG格式……)。。所以还希望高人相助!!!!!!
rainstormmaster 2003-10-20
  • 打赏
  • 举报
回复
不懂你要干什么

下面的建议也许对你有用:

//因为我准备把很多的JPEG文件合并成一个文件,然后要读取的时候只读取一部分
用资源文件就可以实现,把所有用到的JPEG文件都加入到资源文件中
参考:
http://vb1.myrice.com/article/exoterica/exo021.htm

1,485

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧