查看單個文章
舊 2017-06-29, 03:34 PM   #12 (permalink)
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9867小時 | 升級還需:129小時級別:97 | 在線時長:9867小時 | 升級還需:129小時級別:97 | 在線時長:9867小時 | 升級還需:129小時級別:97 | 在線時長:9867小時 | 升級還需:129小時級別:97 | 在線時長:9867小時 | 升級還需:129小時級別:97 | 在線時長:9867小時 | 升級還需:129小時級別:97 | 在線時長:9867小時 | 升級還需:129小時
註冊日期: 2002-12-07
文章: 13345
精華: 0
現金: 26456 金幣
資產: 3024316 金幣
預設

如果將BitBlt 改成 StretchBlt
就可以翻轉 與 縮放

Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

以下是將WinAPI與.NET的畫布概念之混和修改

PHP 語法:
   Private Declare Function GetDC Lib "user32" (ByVal hWnd As Integer) As Integer
   
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As IntegerByVal hDC As Integer) As Integer
   
Private Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As IntegerByVal x As IntegerByVal y As IntegerByVal nWidth As IntegerByVal nHeight As IntegerByVal hSrcDC As IntegerByVal xSrc As IntegerByVal ySrc As IntegerByVal nSrcWidth As IntegerByVal nSrcHeight As IntegerByVal dwRop As Integer) As Integer

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

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim hDC As Integer, sx As Integer, sy As Integer

        Me.Hide()

        PictureBox1.Width = My.Computer.Screen.WorkingArea.Width
        PictureBox1.Height = My.Computer.Screen.WorkingArea.Height

        hDC = GetDC(0) ' 
取得螢幕DC
        sx 
PictureBox1.Width
        sy 
PictureBox1.Height

        Dim g 
As Graphics PictureBox1.CreateGraphics
        Dim bmp 
As Bitmap = New Bitmap(My.Computer.Screen.Bounds.WidthMy.Computer.Screen.Bounds.Height'記憶體圖空間
        g = Graphics.FromImage(bmp) '
畫布

        
' 將螢幕DC的圖像轉移到PictureBox1
        StretchBlt(g.GetHdc, 0, 0, sx, sy, hDC, 0, 0, sx, sy, TernaryRasterOperations.SRCCOPY) '
PictureBox1.CreateGraphics.GetHdc
        PictureBox1
.Image bmp
        PictureBox1
.Update() '不更新就不會顯示出來
        '
釋放資源
        ReleaseDC
(0hDC)
        
g.ReleaseHdc()

        
Me.Show()

    
End Sub 
mini 目前離線  
送花文章: 2013, 收花文章: 8003 篇, 收花: 26807 次
回覆時引用此帖
向 mini 送花的會員:
魔術王子 (2017-06-29)
感謝您發表一篇好文章