注册 登录
编程论坛 VFP论坛

请教关于图片显示更换

wxzd123 发布于 2022-02-14 16:38, 3020 次点击
一个图片文件有若干图片,在更换时把新的图片拷贝到图片文件夹显示新的图片
pice=Filetostr('.\图片\A.png')
THISFORM.image1.PictureVal =pice
这是显示A.PNG 图片
先删除图片文件夹所有文件
Delete File .\图片\*.*
拷贝一个新的图片到图片文件夹
COPY FILE d:\b.png to .\图片\a.png
pice=Filetostr('.\图片\A.png')
THISFORM.image1.PictureVal =pice
有时图片文件下的a.png并没有被删除,不是B.PNG(拷贝后名变为a.png),还是原来的a.png
我甚至先把image1从表单上删除,然后再执行delete图片,再重新加载image1,现象照样有时出现?请问各位老师如何解决?谢谢
32 回复
#2
hu9jj2022-02-14 16:49
应该不需要那么复杂吧,直接将新的图片以同名文件覆盖原来的图片,再刷新一下表单的图像控件就行了。
#3
吹水佬2022-02-14 18:14
可能缓存的问题
试试先执行:
CLEAR RESOURCES [ FileName]
#4
wxzd1232022-02-14 19:22
回复 3楼 吹水佬
版主好,FileName这个是不是具体文件名,可是如果不确定怎么解决?
文件夹下原来的文件都没有删除,新的文件根本没有覆盖,没有拷贝过来
#5
laowan0012022-02-14 19:35
同名就刷新,不同名就重新赋值
#6
wxzd1232022-02-14 19:53
CLEAR RESOURCES 后面什么也没加,测试中,暂时能删除
#7
吹水佬2022-02-14 20:23
以下是引用wxzd123在2022-2-14 19:22:33的发言:

版主好,FileName这个是不是具体文件名,可是如果不确定怎么解决?
文件夹下原来的文件都没有删除,新的文件根本没有覆盖,没有拷贝过来

FileName是可选项,具体参考VFP帮助
#8
wcx_cc2022-02-14 20:45
在我的使用中,有时也发现: thisform.PictureVal =图片字串,在不同的window系统中,这种显示方式并不很牢靠,原因不是很明确。后来改了显示方式,
比如用 thisform.Picture=pfile,pfile 变量代表带路径的图片文件全名。(注:连续显示不同图片时,图片全名不允许重名,可临时变个名称,否则可能不刷新显示),问题最终解决,可试试。
#9
吹水佬2022-02-14 21:08
改变 thisform.Picture 之前执行 CLEAR RESOURCES 应该就可以。
为提高运行效率将磁盘文件读入缓存,之后再次打开文件时就从缓存读取。
但遇到不同内容的同名文件时,就可能出现数据没有刷新的感觉,实际上看到的还是保存在缓存原来文件数据。
#10
wxzd1232022-02-14 22:06
谢谢各位老师的热情帮助
#11
cjc10102022-02-15 11:16
直接
 apic=getfile()
 thisform.image1.picture=paic
就行了,随时换,哪来那么多的事。
#12
wxzd1232022-02-16 16:16
今天又出现原来的图片没有被删除,新的图片没有拷贝过来,仍然显示原来的图片?请问各位老师有什么好的办法?谢谢
#13
吹水佬2022-02-16 18:32
回复 12楼 wxzd123
试试用 PictureVal 属性
如:
op = LOADPICTURE(bmpFile)
image1.PictureVal = op
#14
wxzd1232022-02-16 19:02
谢谢版主,这个加载时间是原来的5倍还多
#15
wxzd1232022-02-16 19:04
原来用Delete File 删除不是每次都不好用是有时,现在改ERASE再试试
#16
wxzd1232022-02-16 22:53
我把界面最小化后在文件中直接删除不了,提示在使用,请问怎么解决?谢谢
#17
wxzd1232022-02-16 23:13
每次都有e.png删不掉,我遍历表单上的所有控件没有加载图片的控件
#18
吹水佬2022-02-17 04:24
给相关文件测试好了
#19
wxzd1232022-02-17 06:28
回复 18楼 吹水佬
您好,现在找到了使用图片代码,我在表单中新建了一个方法程序hbtp
hbtp下的代码:
Declare Long GetDC In user32 Long
Declare Long ReleaseDC In user32 Long, Long
Declare Long GdiplusStartup In GDIPlus Long@, String@, Long
Declare Long GdiplusShutdown In GDIPlus Long
Declare Long GdipCreateBitmapFromScan0 In GDIPlus Long, Long, Long, Long, String@, Long@
Declare Long GdipGetImageGraphicsContext In GDIPlus Long, Long@
Declare Long GdipCreateFromHDC In GDIPlus Long, Long@
Declare Long GdipLoadImageFromFile In GDIPlus String@, Long@
Declare Long GdipGetImageWidth In GDIPlus Long, Long@
Declare Long GdipGetImageHeight In GDIPlus Long, Long@
Declare Long GdipSaveImageToFile In GDIPlus Long, String@, String@, Long
Declare Long GdipDrawImageRectI In GDIPlus Long, Long, Long, Long, Long, Long
Declare Long GdipDisposeImage In GDIPlus Long
Declare Long GdipDeleteGraphics In GDIPlus Long
outFile = "合并.png"
wjm='abcde'
inFile1='.\临时\'+Left(wjm,1)+'.png'
IF !FILE(inFile1)
retu
endif
stGSI = 0h01000000000000000000000000000000
pGDI = 0
GdiplusStartup(@pGDI, @stGSI, 0)
pImage1 = 0
GdipLoadImageFromFile(Strconv(inFile1+0h00,5), @pImage1)         
nWidth1 = 0
GdipGetImageWidth(pImage1, @nWidth1)
nHeight1 = 0
GdipGetImageHeight(pImage1, @nHeight1)
N=Len(wjm)
nWidth = nWidth1*N                 
nHeight = nHeight1                 
PixelFormat_32bppARGB = 0x26200A
pBitmap = 0
GdipCreateBitmapFromScan0(nWidth, nHeight, 0, PixelFormat_32bppARGB, 0, @pBitmap)

pGraphics = 0
GdipGetImageGraphicsContext(pBitmap, @pGraphics)
GdipDrawImageRectI(pGraphics, pImage1, 0, 0, nWidth1, nHeight1)   
For i=2 To N
    inFile2='.\临时\'+Substr(wjm,i,1)++Right(m_dx,4)
    IF FILE(inFile2)
    pImage2 = 0
    GdipLoadImageFromFile(Strconv(inFile2+0h00,5), @pImage2)  
    ii=nWidth1*(i-1)
    GdipDrawImageRectI(pGraphics, pImage2, ii, 0, nWidth1, nHeight1)  
    endif
Endfor
CLSID_BMP = 0h00F47C55041AD3119A730000F81EF32E
GdipSaveImageToFile(pBitmap, Strconv(outFile+0h00,5), CLSID_BMP, 0)  
GdipDisposeImage(pImage1)
GdipDisposeImage(pImage2)
GdipDeleteGraphics(pGraphics)
GdipDisposeImage(pBitmap)
GdiplusShutdown(pGDI)

pImage = 0
GdipLoadImageFromFile(Strconv(outFile+0h00,5), @pImage)
hDC = GetDC(_Screen.HWnd)
pGraphics = 0
GdipCreateFromHDC(hDC, @pGraphics)
GdipDrawImageRectI(pGraphics, pImage, 10, 10, 500, 500*nHeight/nWidth)
GdipDisposeImage(pImage)
GdipDeleteGraphics(pGraphics)
ReleaseDC(_Screen.HWnd, hDC)
是把文件夹下图片合并成一个图片,这些代码是网上找的也不明白,只是做了些修改。
执行thisform.hbtp后图片被占用不能删除,请问老师如何释放掉?谢谢

[此贴子已经被作者于2022-2-17 06:30编辑过]

#20
吹水佬2022-02-17 06:49
回复 19楼 wxzd123
pImage2 = 0  &&加这句
For i=2 To N
    inFile2='.\临时\'+Substr(wjm,i,1)++Right(m_dx,4)
    IF FILE(inFile2)
        pImage2 = 0
        GdipLoadImageFromFile(Strconv(inFile2+0h00,5), @pImage2)  
        ii=nWidth1*(i-1)
        GdipDrawImageRectI(pGraphics, pImage2, ii, 0, nWidth1, nHeight1)
        GdipDisposeImage(pImage2)  &&加这句试试
    endif
Endfor


[此贴子已经被作者于2022-2-17 06:54编辑过]

#21
wxzd1232022-02-17 08:03
回复 20楼 吹水佬
版主,测试一下,还是删除不了
只有本站会员才能查看附件,请 登录

您辛苦了
#22
吹水佬2022-02-17 09:04
以下是引用wxzd123在2022-2-17 08:03:03的发言:

版主,测试一下,还是删除不了
您辛苦了

乜都冇,点测试?
#23
wxzd1232022-02-17 09:35
版主你好,没明白什么意思,我是把你的代码加在我的后面了,运行完合并图片后直接手动到文件是删除的
#24
吹水佬2022-02-17 10:13
回复 23楼 wxzd123
18楼有提过
#25
wxzd1232022-02-17 10:46
回复 24楼 吹水佬
只有本站会员才能查看附件,请 登录

版主,辛苦,谢谢
#26
吹水佬2022-02-17 11:57
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#27
wxzd1232022-02-17 15:17
谢谢,太感谢了。就是看不懂。
这个PNG能透明吗?
#28
吹水佬2022-02-17 16:05
回复 27楼 wxzd123
要求PNG是透明的图片
#29
wxzd1232022-02-17 17:01
你好,那几个图片就是透明的
#30
吹水佬2022-02-17 17:22
以下是引用wxzd123在2022-2-17 17:01:04的发言:

你好,那几个图片就是透明的

单个看也是一样的
只有本站会员才能查看附件,请 登录


#31
wxzd1232022-02-17 18:58
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

我把PNG弄成透明的在表单上就变成黑的了
#32
吹水佬2022-02-17 22:29
回复 31楼 wxzd123
输出图片格式搞错了
输出PNG改两句
CLSID_BMP = 0h00F47C55041AD3119A730000F81EF32E
GdipSaveImageToFile(pBitmap, Strconv(outFile+0h00,5), CLSID_BMP, 0)  &&结果
改为:
CLSID_PNG = 0h06F47C55041AD3119A730000F81EF32E
GdipSaveImageToFile(pBitmap, Strconv(outFile+0h00,5), CLSID_PNG, 0)  &&结果
#33
wxzd1232022-02-18 08:05
版主太厉害了,真心太感谢您了。谢谢
1