请教装载图片的方法有多少种?
请教装载图片的方法? 我现在用的是loadpicture,感觉效率不高, 请问还有其它方法吗? 问题点数:100、回复次数:14Top
1 楼MmMVP(杜霖:(现在是DooDu的马甲。。))回复于 2005-06-20 07:04:24 得分 35
Declare Function LoadImage Lib "User32" Alias "LoadImageA" (ByVal hinst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Top
2 楼DooDu(杜霖:I want,I can(开关拉))回复于 2005-06-20 07:08:59 得分 0
汗,用错id了。。。顺便贴下完整用法:
LoadImage, LoadImageBynum
VB声明
Declare Function LoadImage& Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long)
Declare Function LoadImageBynum& Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long)
说明
载入一个位图、图标或指针
返回值
Long,执行成功则返回对象的一个句柄;零表示失败
参数表
参数 类型及说明
hInst Long,要从其中载入图象的DLL或应用程序模块或实例句柄。零表示装载一幅固有图象
lpsz String,欲载入图象的名字。如指定了hInst,就用这个参数指定资源或资源的标志符(标志符是一个长整数)。如hInst为空,而且已指定了LR_LOADFROMFILE,那么这个参数代表文件名(位图、图标或指针文件)。如果是个Long型值,这个参数就代表固有位图、图标或指针的编号
un1 Long,下述常数之一,指定了欲载入的图象类型:IMAGE_BITMAP, IMAGE_CURSOR, IMAGE_ICON
n1,n2 Long,要求的图象宽度和高度。图象会根据情况自动伸缩。如设为零,表示用图象的默认大小
un2 Long,下述常数的任意组合,它们都在api32.txt文件中得到了定义:
LR_DEFAULTCOLOR 以常规方式载入图象
LR_LOADREALSIZE 不对图象进行缩放处理。忽略n1和n2的设置
LR_CREATEDIBSECTION 如果指定了IMAGE_BITMAP,就返回DIBSection的句柄,而不是位图的句柄
LR_DEFAULTSIZE 如果n1和n2为零,就使用由系统定义的图象默认大小,而不是图象本身定义的大小
LR_LOADFROMFILE 如hInst为零,lpsz就代表要载入适当类型的一个文件的名字,仅适用于Win95
LR_LOADMAP3DCOLORS 将图象中的深灰、灰、以及浅灰像素都替换成COLOR_3DSHADOW,COLOR_3DFACE以及COLOR_3DLIGHT的当前设置
LR_LOADTRANSPARENT 与图象中第一个像素相符的所有像素都由系统替换
LR_MONOCHROME 将图象转换成单色
LR_SHARED 将图象作为一个共享资源载入。在NT 4.0中装载固有资源时要用到这个设置
Top
3 楼wzzwwz(皮皮鲁)回复于 2005-06-20 08:10:17 得分 0
楼上的厉害呀,两个马甲都是一星了Top
4 楼hzh_net(_风云_)回复于 2005-06-20 08:28:21 得分 5
把图片放到资源文件里
然后调用LoadResPicture函数引用位图,图标和光标等资源,调用格式是:
Set 图片变量或属性=LoadResPicture(资源名称,图片类型设置值)
图片类型 图片类型设置值
位图 vbResBitmap
图标 vbResIcon
光标 vbResCursor
如:
Set PicSour1.Picture = LoadResPicture("P1_S", vbResBitmap)Top
5 楼tanaya(唐博士http://blog.csdn.net/tanaya)回复于 2005-06-20 08:59:54 得分 5
Image1.Picture=LoadPicture("C:\1.jpg")
Top
6 楼HotUs()回复于 2005-06-20 09:38:23 得分 0
三楼正解Top
7 楼cleogo(胖子)回复于 2005-06-20 11:16:57 得分 0
hi, MmMVP
请问LoadImage支持Gif,Jpg格式的图片吗? 另外它的装载速度比LoadPicture快吗? 还有它的兼容性怎么样?(是否支持win95/win98/win2000/winxp操作系统)Top
8 楼cleogo(胖子)回复于 2005-06-20 11:21:00 得分 0
另外各位大虾:
除了LoadImage、LoadResPicture、LoadPicture外,还有其它装载图象的方法吗? 我想统一测试一下它们...
Top
9 楼homezj(小吉)回复于 2005-06-20 11:42:45 得分 0
对于磁盘上的图片文件,LoadPicture是很快的,因为磁盘IO速度才是真正瓶颈,它对于API与VB内部函数是一样慢的。
LoadPicture与VB结合很好,若最终需求的是Picture对象,那API就要多出一些步骤,而且速度无明显优势。更何况,LoadPicture直接支持Gif,Jpg格式的图片,这是LoadImage不能比的。Top
10 楼homezj(小吉)回复于 2005-06-20 11:45:44 得分 0
LoadPicture使用磁盘上的图片文件,只需一次性放入Picture对象缓存,以后使用的就是这个Picture对象,不要每次赋值都LoadPicture,那当然会慢得很多。Top
11 楼cleogo(胖子)回复于 2005-06-20 18:27:04 得分 0
hi, homezj(小吉), 您好!
请教怎样一次装入图片到缓存?, 是连续loadpicture到不同的图片控件上吗,那是否要很占内存啊?Top
12 楼junki(『.NET技术争霸天下』)回复于 2005-06-20 18:45:19 得分 5
上面说的很好,你先建立一个图片对象,然后再操作这个对象就可以了Top
13 楼homezj(小吉)回复于 2005-06-20 21:21:56 得分 40
不用放到图片控件上,只需利用图片对象就够了。
内存占用当然会增多,但获得了速度的提高。优化磁盘读写性能的根本出发点:就是减少磁盘IO操作次数。Top
14 楼zlt982001(乐天)回复于 2005-06-20 22:26:03 得分 10
loadpicture 实际就是封装 LoadImage 的API
实际上慢有很多原因,如果你读入的是 jpg 等压缩格式的图片,那么慢应该是在解码jpg的过程
,事实上微软的jpg 的解码效率很差,你可以使用 intel 出的 ijl 来解码 jpg ,其官方给出效率是
微软的4-5倍,魔兽3就是使用该dll来解码jpg的,你可以再魔兽的目录下看到ijl15.dll的文件
另外 该dll 也有vb 调用的历程,具体你可以在 google 搜索Top




