当前位置:编程学习 > VB >>

请问:为什么BitBlt这个API和这个MERGECOPY常量一起使用的时候,对图片好象没有反应呢?

请问:为什么BitBlt这个API和这个MERGECOPY常量一起使用的时候,对图片好象没有反应呢?请热心的朋友,帮帮忙哦!在此,先谢过帮忙的朋友了!

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, _
                                             ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, _
                                             ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
                                             
'Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, _
'                                             ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, _
'                                             ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Private Const BLACKNESS = &H42           ' (DWORD) dest = BLACK
Private Const DSTINVERT = &H550009       ' (DWORD) dest = (NOT dest)
Private Const MERGECOPY = &HC000CA       ' (DWORD) dest = (source AND pattern)
Private Const MERGEPAINT = &HBB0226      ' (DWORD) dest = (NOT source) OR dest
Private Const NOTSRCCOPY = &H330008      ' (DWORD) dest = (NOT source)
Private Const NOTSRCERASE = &H1100A6     ' (DWORD) dest = (NOT src) AND (NOT dest)
Private Const PATCOPY = &HF00021         ' (DWORD) dest = pattern
Private Const PATINVERT = &H5A0049       ' (DWORD) dest = pattern XOR dest
Private Const PATPAINT = &HFB0A09        ' (DWORD) dest = DPSnoo
Private Const SRCAND = &H8800C6          ' (DWORD) dest = source AND dest
Private Const SRCCOPY = &HCC0020         ' (DWORD) dest = source
Private Const SRCERASE = &H440328        ' (DWORD) dest = source AND (NOT dest )
Private Const SRCINVERT = &H660046       ' (DWORD) dest = source XOR dest
Private Const SRCPAINT = &HEE0086        ' (DWORD) dest = source OR dest
Private Const WHITENESS = &HFF0062       ' (DWORD) dest = WHITE


Private Sub Option1_Click()
  Dim a As Long
  
  CommonDialog1.ShowColor
  
  a = BitBlt(Picture1.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, BLACKNESS)
  
  Picture1.Refresh
End Sub

Private Sub Option2_Click()
  Dim b As Long
  
  b = BitBlt(Picture2.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, DSTINVERT)
  
  Picture2.Refresh
End Sub

Private Sub Option3_Click()
  Dim c As Long
  
  c = BitBlt(Picture3.hDC, 0, 0, 300, 300, Picture4.hDC, 300, 300, MERGECOPY)
  
  Picture3.Refresh
End Sub

Private Sub Option4_Click()
  Dim d As Long
  
  d = BitBlt(Picture4.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, MERGEPAINT)
  
  Picture4.Refresh
End Sub

              
                
                
--------------------编程问答--------------------

            ROP码 
 含义 
 
BLACKNESS 
 输出黑色 
 
DSTINVERT 
 反转目的位图 
 
MERGECOPY 
 用与操作把图案(Pattern)与源位图融合起来 
 
MERGEPAINT 
 用或操作把反转的源位图与目的位图融合起来 
 
NOTSRCCOPY 
 把源位图反转然后拷贝到目的地 
 
NOTSRCERASE 
 用或操作融合源和目的位图,然后再反转 
 
PATCOPY 
 把图案拷贝到目的位图中 
 
PATINVERT 
 用异或操作把图案与目的位图相融合 
 
PATPAINT 
 用或操作融合图案和反转的源位图,然后用或操作把结果与目的位图融合 
 
SRCAND 
 用与操作融合源位图和目的位图 
 
SRCCOPY 
 把源位图拷贝到目的位图 
 
SRCERASE 
 先反转目的位图,再用与操作将其与源位图融合 
 
SRCINVERT 
 用异或操作融合源位图和目的位图 
 
SRCPAINT 
 用或操作融合源位图和目的位图 
 
WHITENESS 
 输出白色 
 
--------------------编程问答-------------------- 这个说明我有,我是想知道:为什么BitBlt这个API和这个MERGECOPY常量一起使用的时候,对图片好象没有反应呢? --------------------编程问答-------------------- http://www.cnblogs.com/del/archive/2008/06/25/1229469.html上有一个Delphi做的bitblt光栅运算效果的演示,好象和vb的效果不同.不仅MERGECOPY,其它也有不少效果和应有效果不一致的.我认为这是VB本身的问题. --------------------编程问答-------------------- 是没反应.这个没办法解决. --------------------编程问答-------------------- 应该有反应的,否则干嘛设置这个常量呢? --------------------编程问答-------------------- MERGECOPY 方式下参数 hSrcDC 与其他方式不一致! --------------------编程问答-------------------- 不明什么意思,再具体点,好吗? --------------------编程问答-------------------- 有什么不一样呢? --------------------编程问答-------------------- --------------------编程问答--------------------
引用 7 楼 wujingyi88888 的回复:
不明什么意思,再具体点,好吗?


a = BitBlt(Picture1.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, BLACKNESS) 
b = BitBlt(Picture2.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, DSTINVERT) 
c = BitBlt(Picture3.hDC, 0, 0, 300, 300, Picture4.hDC, 300, 300, MERGECOPY) 
d = BitBlt(Picture4.hDC, 0, 0, 300, 300, Picture16.hDC, 300, 300, MERGEPAINT) 

虽然没看到其他代码,但是画图所用的源图片应该是一样的吧!
你做 MERGECOPY 时 Picture4 中有图像吗?
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,