之前往打印机上打印了图片,现在需要再往上画另一张图片,由于要作混算处理(类似于PS的正片叠底功能),所以要获取打印机上的图像(某个区域),再作计算(我不知道打印机上打印了些什么),但是使用bitblt等函数均无法拷贝到 printer.canvas.handle上的东西,出来的是一片白的,不知道有没有办法取得它的画布上的图像???
51 个解决方案
#1
都米人了?
#2
已经发过去了吧
#3
我试过这样 printer.canvas.draw();然后立即拷贝,结果也是空的,而且我还没有enddoc呢
#4
那你为什么不换个思路,先把2张图片换算好,在发打印机呢
#5
我要是知道谁往上面打了什么,也不用这么绕圈子了
#6
不明白你这问题? 你是想在已经打好的一张图片的纸上在重新打上一张图片上去?
如果不是,那人家发向打印机的数据,为什么不在之前算好再一起发?如果你无法得到对方打印前的数据,那对方已经发向打印机了,这时候打印忙,你怎么连接打印机获得该数据?
#7
那人家发向打印机的数据,为什么不在之前算好再一起发?
晕,都说了,要是能这么做,难道我不会????
先别考虑先后的问题。你自己试一下,
任何情况下把printer.canvas上的内容拷贝出来保存到一张图片上看看能不能取到图像?
晕,都说了,要是能这么做,难道我不会????
先别考虑先后的问题。你自己试一下,
任何情况下把printer.canvas上的内容拷贝出来保存到一张图片上看看能不能取到图像?
#8
其实我是不明白你为什么要实现这个功能,感觉很奇怪,就多了嘴,上面就当我没有回帖
对于你的问题我想问的是,既然打印机已经在打印了,你怎么能连接上,连不上你怎么能获得的数据
#9
....
打印没所谓连不连上的概念,你要打印只需尽管往打印机上发送打印命令
就算你在同一过程里写上如下函数,一样无法获取
printer.begindoc;
printer.canvas.draw(0,0,bmp);
bitblt(dstDc,0,0,width,height,printer.canvas.handle,0,0,srccopy);
printer.enddoc;
这样,dstdc上并没有任何图像
打印没所谓连不连上的概念,你要打印只需尽管往打印机上发送打印命令
就算你在同一过程里写上如下函数,一样无法获取
printer.begindoc;
printer.canvas.draw(0,0,bmp);
bitblt(dstDc,0,0,width,height,printer.canvas.handle,0,0,srccopy);
printer.enddoc;
这样,dstdc上并没有任何图像
#10
打印机正在忙着打印,怎么有空返回数据给你?既然没有返回就说明打印机忙你不能进行连接以获得数据,也可能是我水平不够,期待牛人出现
#11
楼主是想监控目标打印机所打印的任何内容,并显示在画布上是吗?
#12
1 楼主想如何?解释清楚
#13
不太清楚
#14
不太清楚,顶下
#15
有道理啊,我也要知道答案!
#16
It is fine!
#17
顶顶顶
#18
LZ你可以把问题描述得更清楚些的
从你的发言中猜测,你是想在某台打印机打出内容之前,把这内容截取再作处理,而且并不知道是哪个程序或者哪台机子打的,所以没办法先处理再打对吧?这可能得考虑一下驱动了
从你的发言中猜测,你是想在某台打印机打出内容之前,把这内容截取再作处理,而且并不知道是哪个程序或者哪台机子打的,所以没办法先处理再打对吧?这可能得考虑一下驱动了
#19
uiuyiuy
#20
不清楚,顶下。
#21
ding yi xia~~~~~~~~~~~~~
#22
不清楚,顶下。
#23
你说对了,就是我的程序里,也知道是哪个打印机,就好比我上面贴出来的简单代码一样
printer.begindoc;
printer.canvas.draw(0,0,bmp);
//在这之前,是另外一段类似的打印图片的代码,我接着去拷贝DC,但是拷贝不到任何内容
bitblt(dstDc,0,0,width,height,printer.canvas.handle,0,0,srccopy);
printer.enddoc;
因为其它接口只提供了这个DC给我,所以,我没办法在打印前作混合处理!!!!
#24
这个不太好办,如果别人没留给你接口,只能用变通的方法
1.用虚拟打印机获取输出内容,处理后,再发送给真正的打印机
2.HOOK原程序,在输出打印前注入自己的代码,再跳转回来
1.用虚拟打印机获取输出内容,处理后,再发送给真正的打印机
2.HOOK原程序,在输出打印前注入自己的代码,再跳转回来
#25
学习学习,顶下。
#26
除了这两个办法,没其它可行的办法了么?
其实我觉得不管是虚拟打印机,或者是HOOK的办法,关键还是在于如何获取打印机的内容?
其实我觉得不管是虚拟打印机,或者是HOOK的办法,关键还是在于如何获取打印机的内容?
#27
传向打印机的内容,打印机一接收就要处理,没有空理你的请求,所以用楼上的办法是最好.否则可以在中间加个服务器,只有服务器连接打印机就可以
#28
不太清楚
#29
加个服务器
#30
路过,学习
#31
学习~~~~~~~~~~~~
#32
好像是这个意思,监视打印做相应的处理
#33
我只是用过tinypdf 挺好用的
#34
楼主看看这个帖子,
http://topic.csdn.net/t/20030925/10/2297775.html
http://topic.csdn.net/t/20030925/10/2297775.html
#35
截个屏,再打印就是了呗
#36
可以参考下C++的处理方法: http://www.cppblog.com/rawdata 打印部分
记得给分哦~
记得给分哦~
#37
你可以參考一個 Open Source project, PDFCreator。
這個軟件做的比你還複雜,可以把印到硬表機的文件轉成 .PDF。
不過我猜你不會去參考,這個軟體對你而言,太深了。
這個軟件做的比你還複雜,可以把印到硬表機的文件轉成 .PDF。
不過我猜你不會去參考,這個軟體對你而言,太深了。
#38
路边,学习学习
#39
打印机是没法当做U盘来用的,有些东东是只读的
#40
说错了,只能写不能读
#41
我最近也在忙林改的材料,学习下~~~
#42
等待最好的回答。
#43
谢谢各位回复。其实考虑得过于复杂了,可以不用这样处理,由于我的源图片是24位,带黑白和灰度的一个指纹图片,往打印机的画布上画时,只需要使用bitblt 函数,用'或'的方式画上去就可自动透明,
汗一个。搞了这么久,刚刚装了打印机。测试了一下才知道。。。。
汗一个。搞了这么久,刚刚装了打印机。测试了一下才知道。。。。
#44
呵呵,学习了
#45
支持下,顺便得十分
#46
很不错啊。。
#47
嗯嗯 来学习学习
#48
我也要知道答案!谢谢了
#49
各位来晚啦,已经没分了,答案就是
bitmap 是24位的,只要这行代码就可以使白色部分透明的打到打印机上
bitblt(printer.canvas.handle,dx,dy,dw,dh,bitmap.canvas.handle,0,0, SRCAND);
bitmap 是24位的,只要这行代码就可以使白色部分透明的打到打印机上
bitblt(printer.canvas.handle,dx,dy,dw,dh,bitmap.canvas.handle,0,0, SRCAND);
#50
顶顶 下 以后用得着哦
#1
都米人了?
#2
已经发过去了吧
#3
我试过这样 printer.canvas.draw();然后立即拷贝,结果也是空的,而且我还没有enddoc呢
#4
那你为什么不换个思路,先把2张图片换算好,在发打印机呢
#5
我要是知道谁往上面打了什么,也不用这么绕圈子了
#6
不明白你这问题? 你是想在已经打好的一张图片的纸上在重新打上一张图片上去?
如果不是,那人家发向打印机的数据,为什么不在之前算好再一起发?如果你无法得到对方打印前的数据,那对方已经发向打印机了,这时候打印忙,你怎么连接打印机获得该数据?
#7
那人家发向打印机的数据,为什么不在之前算好再一起发?
晕,都说了,要是能这么做,难道我不会????
先别考虑先后的问题。你自己试一下,
任何情况下把printer.canvas上的内容拷贝出来保存到一张图片上看看能不能取到图像?
晕,都说了,要是能这么做,难道我不会????
先别考虑先后的问题。你自己试一下,
任何情况下把printer.canvas上的内容拷贝出来保存到一张图片上看看能不能取到图像?
#8
其实我是不明白你为什么要实现这个功能,感觉很奇怪,就多了嘴,上面就当我没有回帖
对于你的问题我想问的是,既然打印机已经在打印了,你怎么能连接上,连不上你怎么能获得的数据
#9
....
打印没所谓连不连上的概念,你要打印只需尽管往打印机上发送打印命令
就算你在同一过程里写上如下函数,一样无法获取
printer.begindoc;
printer.canvas.draw(0,0,bmp);
bitblt(dstDc,0,0,width,height,printer.canvas.handle,0,0,srccopy);
printer.enddoc;
这样,dstdc上并没有任何图像
打印没所谓连不连上的概念,你要打印只需尽管往打印机上发送打印命令
就算你在同一过程里写上如下函数,一样无法获取
printer.begindoc;
printer.canvas.draw(0,0,bmp);
bitblt(dstDc,0,0,width,height,printer.canvas.handle,0,0,srccopy);
printer.enddoc;
这样,dstdc上并没有任何图像
#10
打印机正在忙着打印,怎么有空返回数据给你?既然没有返回就说明打印机忙你不能进行连接以获得数据,也可能是我水平不够,期待牛人出现
#11
楼主是想监控目标打印机所打印的任何内容,并显示在画布上是吗?
#12
1 楼主想如何?解释清楚
#13
不太清楚
#14
不太清楚,顶下
#15
有道理啊,我也要知道答案!
#16
It is fine!
#17
顶顶顶
#18
LZ你可以把问题描述得更清楚些的
从你的发言中猜测,你是想在某台打印机打出内容之前,把这内容截取再作处理,而且并不知道是哪个程序或者哪台机子打的,所以没办法先处理再打对吧?这可能得考虑一下驱动了
从你的发言中猜测,你是想在某台打印机打出内容之前,把这内容截取再作处理,而且并不知道是哪个程序或者哪台机子打的,所以没办法先处理再打对吧?这可能得考虑一下驱动了
#19
uiuyiuy
#20
不清楚,顶下。
#21
ding yi xia~~~~~~~~~~~~~
#22
不清楚,顶下。
#23
你说对了,就是我的程序里,也知道是哪个打印机,就好比我上面贴出来的简单代码一样
printer.begindoc;
printer.canvas.draw(0,0,bmp);
//在这之前,是另外一段类似的打印图片的代码,我接着去拷贝DC,但是拷贝不到任何内容
bitblt(dstDc,0,0,width,height,printer.canvas.handle,0,0,srccopy);
printer.enddoc;
因为其它接口只提供了这个DC给我,所以,我没办法在打印前作混合处理!!!!
#24
这个不太好办,如果别人没留给你接口,只能用变通的方法
1.用虚拟打印机获取输出内容,处理后,再发送给真正的打印机
2.HOOK原程序,在输出打印前注入自己的代码,再跳转回来
1.用虚拟打印机获取输出内容,处理后,再发送给真正的打印机
2.HOOK原程序,在输出打印前注入自己的代码,再跳转回来
#25
学习学习,顶下。
#26
除了这两个办法,没其它可行的办法了么?
其实我觉得不管是虚拟打印机,或者是HOOK的办法,关键还是在于如何获取打印机的内容?
其实我觉得不管是虚拟打印机,或者是HOOK的办法,关键还是在于如何获取打印机的内容?
#27
传向打印机的内容,打印机一接收就要处理,没有空理你的请求,所以用楼上的办法是最好.否则可以在中间加个服务器,只有服务器连接打印机就可以
#28
不太清楚
#29
加个服务器
#30
路过,学习
#31
学习~~~~~~~~~~~~
#32
好像是这个意思,监视打印做相应的处理
#33
我只是用过tinypdf 挺好用的
#34
楼主看看这个帖子,
http://topic.csdn.net/t/20030925/10/2297775.html
http://topic.csdn.net/t/20030925/10/2297775.html
#35
截个屏,再打印就是了呗
#36
可以参考下C++的处理方法: http://www.cppblog.com/rawdata 打印部分
记得给分哦~
记得给分哦~
#37
你可以參考一個 Open Source project, PDFCreator。
這個軟件做的比你還複雜,可以把印到硬表機的文件轉成 .PDF。
不過我猜你不會去參考,這個軟體對你而言,太深了。
這個軟件做的比你還複雜,可以把印到硬表機的文件轉成 .PDF。
不過我猜你不會去參考,這個軟體對你而言,太深了。
#38
路边,学习学习
#39
打印机是没法当做U盘来用的,有些东东是只读的
#40
说错了,只能写不能读
#41
我最近也在忙林改的材料,学习下~~~
#42
等待最好的回答。
#43
谢谢各位回复。其实考虑得过于复杂了,可以不用这样处理,由于我的源图片是24位,带黑白和灰度的一个指纹图片,往打印机的画布上画时,只需要使用bitblt 函数,用'或'的方式画上去就可自动透明,
汗一个。搞了这么久,刚刚装了打印机。测试了一下才知道。。。。
汗一个。搞了这么久,刚刚装了打印机。测试了一下才知道。。。。
#44
呵呵,学习了
#45
支持下,顺便得十分
#46
很不错啊。。
#47
嗯嗯 来学习学习
#48
我也要知道答案!谢谢了
#49
各位来晚啦,已经没分了,答案就是
bitmap 是24位的,只要这行代码就可以使白色部分透明的打到打印机上
bitblt(printer.canvas.handle,dx,dy,dw,dh,bitmap.canvas.handle,0,0, SRCAND);
bitmap 是24位的,只要这行代码就可以使白色部分透明的打到打印机上
bitblt(printer.canvas.handle,dx,dy,dw,dh,bitmap.canvas.handle,0,0, SRCAND);
#50
顶顶 下 以后用得着哦