找回密码
 加入
搜索
查看: 7098|回复: 24

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

  [复制链接]
发表于 2009-10-12 13:52:27 | 显示全部楼层 |阅读模式
本帖最后由 yxiany 于 2009-11-2 17:35 编辑

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

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

请高手指点! au3抓图后能保存成1bpp的bmp文件吗?
发表于 2009-10-12 14:20:57 | 显示全部楼层
试下_GDIPlus_BitmapCloneArea
 楼主| 发表于 2009-10-12 14:53:30 | 显示全部楼层
我测试了一下:_GDIPlus_BitmapCloneArea函数也不支持$GDIP_PXF01INDEXED(即1 bpp)

好像是DLLCALL函数不支持$GDIP_PXF01INDEXED

DLLCALL函数能修改吗?
 楼主| 发表于 2009-10-12 15:05:47 | 显示全部楼层
有什么办法吗?朋友们!
发表于 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
 楼主| 发表于 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 的变量可用)!
发表于 2009-10-12 16:53:08 | 显示全部楼层
莫非你是看到scite里的ScreenCapture的调试信息就认为是不成功?

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

评分

参与人数 1金钱 +1 收起 理由
kn007 + 1 必须IE才行,我也很郁闷,我是IE8

查看全部评分

 楼主| 发表于 2009-10-12 16:58:07 | 显示全部楼层
是用6楼的那个测试程序测试的,如果可以就能在文件加中生成一个bmp文件,12,24,32,64都可以生成目标图片文件,可是1,4,8都不可以生成目标图片文件.
 楼主| 发表于 2009-10-12 17:17:53 | 显示全部楼层
朋友们,帮着看看如何实现!谢谢!
发表于 2009-10-12 19:56:05 | 显示全部楼层
本帖最后由 sxd 于 2009-10-12 20:35 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +1 收起 理由
kn007 + 1 我是说DZ上传图片的问题,我晕,是因为IE8的 ...

查看全部评分

 楼主| 发表于 2009-10-13 11:40:04 | 显示全部楼层
To: sxd

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

评分

参与人数 1金钱 +1 收起 理由
kn007 + 1 http://www.autoit.net.cn/forum.php?mod=v

查看全部评分

 楼主| 发表于 2009-10-13 12:46:41 | 显示全部楼层
要不能把你改好的源码发给我,我运行一下试试!谢谢!
发表于 2009-10-13 12:59:46 | 显示全部楼层
http://www.autoitx.com/forum.php ... &extra=page%3D1
我就是用的帮助里的例子
 楼主| 发表于 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
 楼主| 发表于 2009-10-13 14:22:41 | 显示全部楼层
有朋友帮着测试过上面的代码了吗?能产生黑白图片文件吗?谢谢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-17 01:27 , Processed in 0.083167 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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