找回密码
 加入
搜索
查看: 6474|回复: 13

[图形处理] 请教各位大大有关bmp流转换jpg的问题(以解决)

  [复制链接]
发表于 2010-8-12 16:31:15 | 显示全部楼层 |阅读模式
本帖最后由 txm888 于 2010-8-14 09:31 编辑

这问题困扰我很久,论坛也搜索遍了,都没找到解决方案。
bmp不停随机生成新的图像,,然后用论坛的bmp转jpg,发现bmp处于占用中,没办法生成新的图像,请教各位大仙帮想想办法啊,谢啦,
这是一段bmp转jpg的函数

;BMP转JPG函数
#include <GDIPlus.au3>

_BmpToJpg("a.bmp", "b.jpg")
Func _BmpToJpg($Bmp,$Jpg)
Local $hImage, $CLSID
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile($Bmp)
$CLSID = _GDIPlus_EncodersGetCLSID("JPG")
_GDIPlus_ImageSaveToFileEx($hImage,$Jpg, $CLSID)
_GDIPlus_ShutDown()
EndFunc


评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-8-13 08:55:25 | 显示全部楼层
怎么没人理啊,,为了不让贴子沉下去,我自己先顶着,
发表于 2010-8-13 09:19:54 | 显示全部楼层
这个还真不会,我去查查资料先
 楼主| 发表于 2010-8-13 10:36:32 | 显示全部楼层
回复 3# UUpig


    谢谢达达,,查到了请上来反馈下,感谢,
发表于 2010-8-13 11:14:39 | 显示全部楼层
反复打开。直到能正常打开。。。或者再加个超时多少豪秒就跳过这个文件
#include <GDIPlus.au3>

$to = _BmpToJpg("a.bmp", "b.jpg")

Func _BmpToJpg($Bmp,$Jpg)
Local $hImage, $CLSID
_GDIPlus_StartUp()
$begin = TimerInit()
do
$hImage = _GDIPlus_ImageLoadFromFile($Bmp)
sleep(10)
if TimerDiff($begin) > 10000 then Return -1
Until $hImage <> "0x00000000"
$CLSID = _GDIPlus_EncodersGetCLSID("JPG")
_GDIPlus_ImageSaveToFileEx($hImage,$Jpg, $CLSID)
_GDIPlus_ShutDown()
EndFunc

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-8-13 13:57:42 | 显示全部楼层
回复 5# xsjtxy


    谢谢你,可能是我表达没够清楚,你答案只适宜处理图像无法载入的情况,若载入不成功,则超时跳过,若载入成功,则转换.
而我要的是将已载入转换的原图片变为可写状态,好让新图像生成并覆盖原图像进行下一轮转换,
也就是不让原图片因转换而变成"文件正在被另一个程序使用,无法重命名"
简单地说是想在不关闭程序的前提下将曾载入的图片与程序本身解雇变为可写,比如可以重命名等

再次谢谢你
发表于 2010-8-13 15:17:59 | 显示全部楼层
回复 6# txm888


    看明白了。改了半天函数。。还是无法解决。等高手出现吧。
 楼主| 发表于 2010-8-13 16:51:58 | 显示全部楼层
顶起,,高手们,请现身吧!!!!!!!!!!
发表于 2010-8-13 17:35:03 | 显示全部楼层
你的代码简单测试ok。

你的文件占用是仅仅用上述代码的时候出现,还是,随机创建后系统也无法访问?

如果是后者,与上述代码无关。
 楼主| 发表于 2010-8-14 09:00:10 | 显示全部楼层
回复 9# republican


    文件占用是因该代码转换而被占用,如果不用该代码转换压缩,原图片是可以持续更新的,
 楼主| 发表于 2010-8-14 09:01:41 | 显示全部楼层
感觉是因为上述代码载入原图片转换后,不释放原图片引起的,
发表于 2010-8-14 09:15:20 | 显示全部楼层
_GDIPlus_ImageDispose($hImage)
这段代码用过?

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

 楼主| 发表于 2010-8-14 09:28:39 | 显示全部楼层
本帖最后由 txm888 于 2010-8-14 09:46 编辑

回复 12# republican


   
哇,你真是高人,问题得以解决,,的确是因为没有加上一条代码而引起的,这条代码可以实现释放图像的功能,再次谢谢你,,改后的代码如下:


#include <GDIPlus.au3>

While 1
sleep(2000)
_BmpToJpg("a.jpg", "b.jpg")
WEnd

Func _BmpToJpg($Bmp,$Jpg)
Local $hImage, $CLSID
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile($Bmp)
$CLSID = _GDIPlus_EncodersGetCLSID("JPG")
_GDIPlus_ImageSaveToFileEx($hImage,$Jpg, $CLSID)
_GDIPlus_ImageDispose($hImage) ;添加此行代码即可解决本案问题,哈哈
_GDIPlus_ShutDown()
EndFunc
发表于 2016-1-4 17:55:07 | 显示全部楼层
本帖最后由 kxing 于 2016-1-4 17:56 编辑

不知道其他格式转换jpg有办法吗,如png等。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-26 22:36 , Processed in 0.088395 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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