yxiany 发表于 2009-10-12 13:52:27

au3抓图后能保存成1bpp的bmp文件吗?

本帖最后由 yxiany 于 2009-11-2 17:35 编辑

想用autoit实现抓图的功能,并且能把抓图后的数据保存成1bpp的bmp文件,请问,该如何实现?

好像autoit不支持保存成1位的bmp文件!

请高手指点! au3抓图后能保存成1bpp的bmp文件吗?

bing614 发表于 2009-10-12 14:20:57

试下_GDIPlus_BitmapCloneArea

yxiany 发表于 2009-10-12 14:53:30

我测试了一下:_GDIPlus_BitmapCloneArea函数也不支持$GDIP_PXF01INDEXED(即1 bpp)

好像是DLLCALL函数不支持$GDIP_PXF01INDEXED

DLLCALL函数能修改吗?

yxiany 发表于 2009-10-12 15:05:47

有什么办法吗?朋友们!

sxd 发表于 2009-10-12 16:31:43

怎么会不支持呢
Pixel format for the new bitmap:
$GDIP_PXF01INDEXED = 1 bit per pixel, indexed
$GDIP_PXF04INDEXED = 4 bits per pixel, indexed
$GDIP_PXF08INDEXED = 8 bits per pixel, indexed
$GDIP_PXF16GRAYSCALE = 16 bits per pixel, grayscale
$GDIP_PXF16RGB555 = 16 bits per pixel; 5 bits for each RGB component
$GDIP_PXF16RGB565 = 16 bits per pixel; 5 bits for red, 6 bits for green and 5 bits blue
$GDIP_PXF16ARGB1555 = 16 bits per pixel; 1 bit for alpha and 5 bits for each RGB component
$GDIP_PXF24RGB = 24 bits per pixel; 8 bits for each RGB component
$GDIP_PXF32RGB = 32 bits per pixel; 8 bits for each RGB component. No alpha component.
$GDIP_PXF32ARGB = 32 bits per pixel; 8 bits for each RGB and alpha component
$GDIP_PXF32PARGB = 32 bits per pixel; 8 bits for each RGB and alpha component, pre-mulitiplied
$GDIP_PXF48RGB = 48 bits per pixel; 16 bits for each RGB component
$GDIP_PXF64ARGB = 64 bits per pixel; 16 bits for each RGB and alpha component
$GDIP_PXF64PARGB = 64 bits per pixel; 16 bits for each RGB and alpha component, pre-multiplied

yxiany 发表于 2009-10-12 16:42:15

本帖最后由 yxiany 于 2009-10-12 17:03 编辑

不可以.1,4,8bit都不可以, 12,24,32,64都可以!下面是一个测试程序,Autoit help中的源码!

#include <GDIPlus.au3>
#include <ScreenCapture.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
        Local $hBitmap, $hClone, $hImage, $iX, $iY

        ; Initialize GDI+ library
        _GDIPlus_StartUp ()

        ; Capture 32 bit bitmap
        $hBitmap = _ScreenCapture_Capture ("")
        $hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)

        ; Create 24 bit bitmap clone
;        $iX = _GDIPlus_ImageGetWidth ($hImage)
;        $iY = _GDIPlus_ImageGetHeight ($hImage)       
$hClone = _GDIPlus_BitmapCloneArea ($hImage, 100, 100, 400, 200, $GDIP_PXF24RGB)

        ; Save bitmap to file
        _GDIPlus_ImageSaveToFile ($hClone, "D:\AppSofts\TEST\AutoIT_test\GDIPlus_Image.bmp")

        ; Clean up resources
        _GDIPlus_ImageDispose ($hClone)
        _GDIPlus_ImageDispose ($hImage)
        _WinAPI_DeleteObject ($hBitmap)

        ; Shut down GDI+ library
        _GDIPlus_ShutDown ()

EndFunc   ;==>_Main

我是通过更改象素变量(红色部分)来测试的,测试的结果:

一.1,4,8bit都不可以生成目标图片文件(即$GDIP_PXF01INDEXED ,PXF04INDEXED ,PXF08INDEXED这三个变量不可用 )
二.12,24,32,64都可以生成目标图片文件(即$GDIP_PXF16RGB555到$GDIP_PXF64PARGB 的变量可用)!

sxd 发表于 2009-10-12 16:53:08

莫非你是看到scite里的ScreenCapture的调试信息就认为是不成功?

汗 本来想上传图片的 谁知道论坛老是提示 非法的图片 囧

yxiany 发表于 2009-10-12 16:58:07

是用6楼的那个测试程序测试的,如果可以就能在文件加中生成一个bmp文件,12,24,32,64都可以生成目标图片文件,可是1,4,8都不可以生成目标图片文件.

yxiany 发表于 2009-10-12 17:17:53

朋友们,帮着看看如何实现!谢谢!

sxd 发表于 2009-10-12 19:56:05

本帖最后由 sxd 于 2009-10-12 20:35 编辑

是不是我的回帖没回清楚? 那我还是上传图片吧我是可以的啊
to 007:原来你说的是上传图片的ie问题 呵呵

yxiany 发表于 2009-10-13 11:40:04

To: sxd

      我试了好多次还是不行,就是不能产生黑白图.我用的autoit是3.3.0.0英文版的,你的好像是汉化版的,能把你的autoit的安装程序发给我吗?非常感谢!yxiany0223@163.com

yxiany 发表于 2009-10-13 12:46:41

要不能把你改好的源码发给我,我运行一下试试!谢谢!

sxd 发表于 2009-10-13 12:59:46

http://www.autoitx.com/forum.php?mod=viewthread&tid=6&extra=page%3D1
我就是用的帮助里的例子

yxiany 发表于 2009-10-13 13:39:04

本帖最后由 yxiany 于 2009-10-13 13:40 编辑

我用汉化版的也试了一下,还是不能产生黑白图片.我把我源码发给你,你别改,看看能生成黑白图片吗!生成的图片文件在D盘根目录下.谢谢!#include <GDIPlus.au3>
#include <ScreenCapture.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
        Local $hBitmap, $hClone, $hImage, $iX, $iY

        ; Initialize GDI+ library
        _GDIPlus_StartUp ()

        ; Capture 32 bit bitmap
        $hBitmap = _ScreenCapture_Capture ("")
        $hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap)

        ; Create 24 bit bitmap clone
        $iX = _GDIPlus_ImageGetWidth ($hImage)
        $iY = _GDIPlus_ImageGetHeight ($hImage)
        $hClone = _GDIPlus_BitmapCloneArea ($hImage, 0, 0, $iX, $iY, $GDIP_PXF01INDEXED);$GDIP_PXF01INDEXED $GDIP_PXF24RGB

        ; Save bitmap to file
        _GDIPlus_ImageSaveToFile ($hClone, "D:\GDIPlus_Image.bmp")

        ; Clean up resources
        _GDIPlus_ImageDispose ($hClone)
        _GDIPlus_ImageDispose ($hImage)
        _WinAPI_DeleteObject ($hBitmap)

        ; Shut down GDI+ library
        _GDIPlus_ShutDown ()

EndFunc   ;==>_Main

yxiany 发表于 2009-10-13 14:22:41

有朋友帮着测试过上面的代码了吗?能产生黑白图片文件吗?谢谢
页: [1] 2
查看完整版本: au3抓图后能保存成1bpp的bmp文件吗?