请教各位大大有关bmp流转换jpg的问题(以解决)
本帖最后由 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
{:face (319):} 怎么没人理啊,,为了不让贴子沉下去,我自己先顶着,{:face (361):} 这个还真不会,我去查查资料先 回复 3# UUpig
谢谢达达,,查到了请上来反馈下,感谢, 反复打开。直到能正常打开。。。或者再加个超时多少豪秒就跳过这个文件
#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
回复 5# xsjtxy
谢谢你,可能是我表达没够清楚,你答案只适宜处理图像无法载入的情况,若载入不成功,则超时跳过,若载入成功,则转换.
而我要的是将已载入转换的原图片变为可写状态,好让新图像生成并覆盖原图像进行下一轮转换,
也就是不让原图片因转换而变成"文件正在被另一个程序使用,无法重命名"
简单地说是想在不关闭程序的前提下将曾载入的图片与程序本身解雇变为可写,比如可以重命名等
再次谢谢你 回复 6# txm888
看明白了。改了半天函数。。还是无法解决。等高手出现吧。 顶起,,高手们,请现身吧!!!!!!!!!!
{:face (301):} 你的代码简单测试ok。
你的文件占用是仅仅用上述代码的时候出现,还是,随机创建后系统也无法访问?
如果是后者,与上述代码无关。 回复 9# republican
文件占用是因该代码转换而被占用,如果不用该代码转换压缩,原图片是可以持续更新的, 感觉是因为上述代码载入原图片转换后,不释放原图片引起的,
{:face (382):} _GDIPlus_ImageDispose($hImage)这段代码用过? 本帖最后由 txm888 于 2010-8-14 09:46 编辑
回复 12# republican
{:face (370):}
哇,你真是高人,问题得以解决,,的确是因为没有加上一条代码而引起的,这条代码可以实现释放图像的功能,再次谢谢你,,改后的代码如下:
#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 本帖最后由 kxing 于 2016-1-4 17:56 编辑
不知道其他格式转换jpg有办法吗,如png等。。
页:
[1]