标题:怎样将QQ或微信截图暂存在剪切板中的图象保存到一个JPG格式的图像文件 ?
只看楼主
asis
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:6
注 册:2022-9-6
结帖率:83.33%
已结贴  问题点数:20 回复次数:10 
怎样将QQ或微信截图暂存在剪切板中的图象保存到一个JPG格式的图像文件 ?
    先在CAD画图软件中用QQ或微信对零件图的一部分手动截图后(不是截取指定坐标区域或全屏),然后切换到VFP程序界面通过按一个“生成截图按钮”用VFP命令把暂存在剪切板中的截图保存到一个JPG格式的图像文件中,比如C:\AAA.JPG
   请问如何实现? 谢谢。
搜索更多相关主题的帖子: 图像 QQ 格式 JPG 文件 
2022-09-06 15:39
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:10 
希望你能用得上

?保存剪贴板里的图片("c:\test.bmp")

FUNCTION 保存剪贴板里的图片
LPARAMETERS szOutputFile
****************************************
* szOutputFile:输入文件名,全路径
****************************************

#DEFINE CF_BITMAP    2
DECLARE LONG IsClipboardFormatAvailable  IN User32 LONG
DECLARE LONG OpenClipboard               IN User32 LONG
DECLARE LONG CloseClipboard              IN User32
DECLARE LONG GetClipboardData            IN User32 LONG
DECLARE LONG GdiplusStartup              IN gdiplus LONG@, STRING@, LONG
DECLARE LONG GdiplusShutdown             IN gdiplus LONG
DECLARE LONG GdipCreateBitmapFromHBITMAP IN gdiplus LONG, LONG, LONG@
DECLARE LONG GdipDisposeImage            IN gdiplus LONG
DECLARE LONG GdipSaveImageToFile         IN gdiplus LONG, STRING@, STRING@, LONG

IF IsClipboardFormatAvailable(CF_BITMAP) == 0
    MESSAGEBOX('剪贴板里没有图片',0+64,'系统提示')
    RETURN .F.
ENDIF
IF OpenClipboard(0) == 0
    RETURN .F.
ENDIF
LOCAL dhClipBmp
dhClipBmp = GetClipboardData(CF_BITMAP)
IF dhClipBmp == 0
    CloseClipboard()
    MESSAGEBOX('剪贴板里没有图片',0+64,'系统提示')
    RETURN .F.
ENDIF
LOCAL stGSI, lpGDI, jpgGUID, dhBitmap
stGSI = 0h01000000000000000000000000000000
lpGDI = 0
GdiplusStartup(@lpGDI, @stGSI, 0)
jpgGUID  = 0h01F47C55041AD3119A730000F81EF32E
dhBitmap = 0
GdipCreateBitmapFromHBITMAP(dhClipBmp, 2, @dhBitmap)
GdipSaveImageToFile(dhBitmap, STRCONV(szOutputFile + 0h00, 5), @jpgGUID, 0)
GdipDisposeImage(dhBitmap)
GdiplusShutdown(lpGDI)
CloseClipboard()
RETURN .T.
2022-09-06 16:55
asis
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:6
注 册:2022-9-6
得分:0 
感谢!在VFP9下确实好用。
但我想在VFP6下运行这些代码时,在这条语句处出错:stGSI = 0h01000000000000000000000000000000
不知道能否改动一下代码,使其可以在VFP6下使用呢?
2022-09-06 18:53
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
好!
2022-09-07 06:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 3楼 asis
0h01F47C55041AD3119A730000F81EF32E
看作字符串内码 16字节
01 F4 7C 55 04 1A D3 11 9A 73 00 00 F8 1E F3 2E
用 CHR(0x01) + CHR(0xF4) + ......
2022-09-07 07:23
asis
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:6
注 册:2022-9-6
得分:0 
DECLARE INTEGER OpenClipboard               IN User32 INTEGER
DECLARE INTEGER CloseClipboard              IN User32
DECLARE LONG IsClipboardFormatAvailable IN user32 LONG
DECLARE INTEGER EmptyClipboard              IN User32
DECLARE INTEGER SetClipboardData            IN User32 INTEGER,INTEGER
DECLARE INTEGER LoadImage                   IN WIN32API INTEGER,String,INTEGER,INTEGER,INTEGER,INTEGER
DECLARE INTEGER GetClipboardData            IN User32 INTEGER
DECLARE INTEGER GdipCreateBitmapFromHBITMAP IN GdiPlus.dll INTEGER, INTEGER, INTEGER @
DECLARE INTEGER GdipSaveImageToFile         IN GdiPlus.dll INTEGER,String,String @,String @
DECLARE Long    GdipCreateHBITMAPFromBitmap IN GDIPLUS.DLL Long nativeImage, Long @, Long
DECLARE Long    GdipCreateBitmapFromFile    IN GDIPLUS.DLL String FileName, Long @nBitmap
DECLARE Long    CopyImage                   IN WIN32API Long hImage, Long, Long, Long , Long
#Define CF_BITMAP 2
#Define CF_DIB 8
#Define IMAGE_BITMAP 0
#Define LR_LOADFROMFILE 16

IF IsClipboardFormatAvailable(2)=0
    MESSAGEBOX("剪贴板中没有图像",64,"提示")
else
    IF OpenClipboard(0)=0
        MESSAGEBOX("剪贴板打开失败",64,"提示")
    else
OpenClipboard(0)
hBitmap = GetClipboardData(CF_BITMAP)
hDib = GetClipboardData(CF_DIB)
CloseClipboard()
uBitmap=0
GdipCreateBitmapFromHBITMAP(hBitmap,2,@uBitmap)
lcOutputFile=STRCONV('C:\Temp1.jpg'+CHR(0),5)

lqEncoderClsID_JPG=0h01F47C55041AD3119A730000F81EF32E        &&运行时此处提示语法错误!!!  (JPG格式)

GdipSaveImageToFile(uBitmap,lcOutputFile,lqEncoderClsID_JPG,NULL)
ENDIF
ENDIF

版主,你好! 上面这段代码也可以在VFP9下正常把截图生成JPG文件,但在VFP6下运行时在倒数第4行提示语法错误。

根据您上面的提示,我把这条语句由:lqEncoderClsID_JPG=0h01F47C55041AD3119A730000F81EF32E   改为:
lqEncoderClsID_JPG=CHR(0x01)+CHR(0xF4)+CHR(0x7C)+CHR(0x55)+CHR(0x04)+CHR(0x1A)+CHR(0xD3)+CHR(0x11)+CHR(0x9A)+CHR(0x73)+CHR(0x00)+CHR(0x00)+CHR(0xF8)+CHR(0x1E)+CHR(0xF3)+CHR(0x2E)

虽然运行不出现错误提示,但没有生成截图JPG格式的文件,不知道哪个地方不对,请指教,谢谢。
2022-09-07 10:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 6楼 asis
不是在VFP9能正常运行吗
不要一下改那么多
就改改在VFP9运行的代码在VFP6试
2022-09-07 11:27
asis
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:6
注 册:2022-9-6
得分:0 
经测试,目前以上代码只差以下这一条赋值语句在VFP6下不支持:
lqEncoderClsID_JPG=0h01F47C55041AD3119A730000F81EF32E

其他的语句在VFP6下应该都没问题,不知道如何把以上这条语句变换成VFP6能支持的形式?

2022-09-07 18:15
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:0 
参考这段代码看看?网上摘抄的。。。
主要是下面declare的这个函数的用法比较难懂。
DECLARE INTEGER GdipSaveImageToFile IN gdiplus.DLL ;
  INTEGER nImage,;
  STRING wFilename,;
  STRING qEncoder,;
  STring @nEncoderParamsPtr &&如果你想用指针的话可以定义为Long
LOCAL nImage as Integer
pSourceFileNAme='in.png'
pNewFileNAme='out.png'
cInput = PADR(CHR(1), 16, CHR(0))
GdipLoadImageFromFile(STRCONV(pSourceFileNAme+CHR(0),5),@nImage)
GUID_FormatJPG="{557CF401-1A04-11D3-9A73-0000F81EF32E}"
lcEncode = REPLICATE(CHR(0),16)
CLSIDFromString(STRCONV(GUID_FormatJPG+CHR(0),5),@lcEncode)&&这里定义保存后的图像格式为JPG
lcGuid = REPLICATE(CHR(0),16) GUID_Quality="{1d5be4b5-fa4a-452d-9cdd-5db35105e7eb}"&&对图像质量进行操作
CLSIDFromString(STRCONV(GUID_Quality+CHR(0),5),@lcGuid) Quality=50&&图像质量值设置
QualityStr=BINTOC(Quality,'4rs') ValuePtr=StrDup(@QualityStr)&&得到图像质量设置值的内存地址
EncoderParameter=lcGuid+BINTOC(1,'4rs')+BINTOC(4,'4rs')+BINTOC(ValuePtr,'4rs')
EncoderParameters=bintoc(1,'4rs')+EncoderParameter
GdipSaveImageToFile(nImage,STRCONV(pNewFileNAme+CHR(0),5),lcEncode,@EncoderParameters)
*#define CLSID_BMP     "{557CF400-1A04-11D3-9A73-0000F81EF32E}"
*#define CLSID_JPEG     "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
*#define CLSID_GIF     "{557CF402-1A04-11D3-9A73-0000F81EF32E}"
*#define CLSID_TIFF     "{557CF405-1A04-11D3-9A73-0000F81EF32E}"
*#define CLSID_PNG     "{557CF406-1A04-11D3-9A73-0000F81EF32E}"
2022-09-07 22:05
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:0 
看到2楼的代码,突然有想把它改成一个vfp类的冲动,哈哈!
2022-09-07 22:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509960-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051317 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved