Xoay ảnh trong picturebox

Các thủ thuật về âm thanh, đồ họa, truyền thông đa phương tiện...
Post Reply
User avatar
truongphu
VIP
VIP
Posts: 4780
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

Xoay ảnh trong picturebox

Post by truongphu »

Thủ thuật: Xoay ảnh trong picturebox
Tác giả: playgemboy & truongphu
Mô tả: Xoay ảnh trong picturebox
gửi bởi playgemboy vào ngày Thứ 6 09/05/2008 2:54 pm
Cần 1 nút command1, 2 cái picture, Picture1 chứa ảnh cần xoay, Picture2 chứa ảnh đã xoay.Nạp một bức hình vào picture1. Nhập code này:

Code: Select all

Private Sub Command1_Click()Dim sHeigh As IntegerDim sWidth As IntegerPicture1.ScaleMode = 3Picture2.ScaleMode = 3Picture1.AutoSize = TruePicture2.Move Picture1.Left, Picture1.Top + Picture1.Height, Picture1.Width, Picture1.HeightsHeigh = Picture1.ScaleHeightsWidth = Picture1.ScaleWidth For i = sHeigh To 1 Step -1    For j = 1 To sWidth        Picture2.PSet (i, sHeigh - j), Picture1.Point(i, j)    Next jNext iEnd Sub
Lưu ý, nó có thể làm treo máy một chút nếu bạn dùng ảnh có độ phân giải cao
Mấy cái góc kia bạn tự nghiên cứu( lấy pixel của này gán cho kia, ăn thua là gán vào vị trí nào của hình thứ 2 thôi )
Còn nếu "làm biếng" lấy cái code trên kia, cho góc là 180 là được!

gửi bởi truongphu vào ngày Thứ 2 12/05/2008 8:58 pm

Code: Select all

Private Declare Function StretchBlt Lib "gdi32" (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 LongPrivate Sub Command1_Click()Picture1.ScaleMode = 3 ' pixelsCall StretchBlt(Picture1.hdc, Picture1.ScaleWidth, 0, Picture1.ScaleWidth * -1, Picture1.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, &HCC0020)End SubPrivate Sub Command2_Click()Picture1.ScaleMode = 3 ' pixelsCall StretchBlt(Picture1.hdc, 0, Picture1.ScaleHeight, Picture1.ScaleWidth, Picture1.ScaleHeight * -1, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, &HCC0020)End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
User avatar
playgemboy
Thành viên danh dự
Thành viên danh dự
Posts: 289
Joined: Sun 13/04/2008 6:10 am
Location: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Contact:

Re: Xoay ảnh trong picturebox

Post by playgemboy »

Hì ,Thank bác TruongPhu đã post thêm code của em nha :D
<I Come Back>
giongto35
Thành viên danh dự
Thành viên danh dự
Posts: 194
Joined: Thu 19/04/2007 10:17 am
Location: Đà Nẵng City
Been thanked: 1 time
Contact:

Re: Xoay ảnh trong picturebox

Post by giongto35 »

Còn code em đâu T_T
________________________________________________________________________________________________
. . . . . . . . . . . . .. .
User avatar
truongphu
VIP
VIP
Posts: 4780
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

Re: Xoay ảnh trong picturebox

Post by truongphu »

Do bài giongto viết là file nén đó

Cách 3:
gửi bởi giongto35 vào ngày Thứ 2 12/05/2008 5:54 pm
Attachments
DoiXung.rar
(52.62 KiB) Downloaded 1125 times
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
User avatar
lipton150786
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 345
Joined: Thu 18/11/2010 10:00 pm
Has thanked: 5 times
Been thanked: 30 times

Re: Xoay ảnh trong picturebox

Post by lipton150786 »

t6oi có một project xoay ảnh nhưng chưa tốt lắm nhờ mọi người fix giùm các vần đề sao?

1. Khi click vào button thì ảnh xoay có chiều cao nhỏ hơn ảnh góc.Viền phía trên và phía dưới bị mật một khúc(không thể lấy hất hình)
2. khi xoay thì vẫn còn thấy ảnh ban đầu(nền bên dưới) thay ví chỉ có một ảnh thôi.

cám ơn trước

Code: Select all

Option Explicit
Public iAngle As Integer

Private Declare Function PlgBlt Lib "gdi32" (ByVal hdcDest As Long, _
                                     lpPoint As POINTAPI, _
                                     ByVal hdcSrc As Long, _
                                     ByVal nXSrc As Long, _
                                     ByVal nYSrc As Long, _
                                     ByVal nWidth As Long, _
                                     ByVal nHeight As Long, _
                                     ByVal hbmMask As Long, _
                                     ByVal xMask As Long, _
                                     ByVal yMask As Long) As Long

Const NotPI = 3.14159265238 / 180
'Const NotPI = PI / 180

Private Type POINTAPI
    X As Long
    Y As Long
End Type


Private Sub DanRotate(ByRef picDestHdc As Long, xPos As Long, yPos As Long, _
                        ByVal Angle As Long, _
                        ByRef picSrcHdc As Long, srcXoffset As Long, srcYoffset As Long, _
                        ByVal srcWidth As Long, ByVal srcHeight As Long)
'
'  DanRotate - Rotates an image.
'
' PicDestHdc      = the hDc of the target picturebox (ie. Picture2.hdc )
' xPos            = the target coordinates (note that the image will be centered around these
' yPos              coordinates).
' Angle          = Rotate Angle (0-360)
' PicSrcHdc      = The source image to rotate (ie. Picture1.hdc )
' srcXoffset      = The offset coordinates within the Source Image to grab.
' srcYoffset
' srcWidth        = The width/height of the source image to grab.
' srcHeight
'
' Returns: Nothing.

    Dim Points(3) As POINTAPI
    Dim DefPoints(3) As POINTAPI
    Dim ThetS As Single, ThetC As Single
    Dim ret As Long
    'SET LOCAL AXIS / ALIGNMENT
    Points(0).X = (-srcWidth * 0.5)
    Points(0).Y = (-srcHeight * 0.5)

    Points(1).X = Points(0).X + srcWidth
    Points(1).Y = Points(0).Y
    
    Points(2).X = Points(0).X
    Points(2).Y = Points(0).Y + srcHeight
    'ROTATE AROUND Z-AXIS
    ThetS = Sin(Angle * NotPI)
    ThetC = Cos(Angle * NotPI)
    DefPoints(0).X = (Points(0).X * ThetC - Points(0).Y * ThetS) + xPos + 10
    DefPoints(0).Y = (Points(0).X * ThetS + Points(0).Y * ThetC) + yPos

    DefPoints(1).X = (Points(1).X * ThetC - Points(1).Y * ThetS) + xPos + 10
    DefPoints(1).Y = (Points(1).X * ThetS + Points(1).Y * ThetC) + yPos

    DefPoints(2).X = (Points(2).X * ThetC - Points(2).Y * ThetS) + xPos + 10
    DefPoints(2).Y = (Points(2).X * ThetS + Points(2).Y * ThetC) + yPos

    PlgBlt picDestHdc, DefPoints(0), picSrcHdc, srcXoffset, srcYoffset, srcWidth, srcHeight, 0, 0, 0
                        
End Sub

Private Sub Command1_Click()
    If iAngle < 1 Then
        iAngle = 1
    End If
        Pic1.Cls
        
        DanRotate Pic1.hdc, 120, 100, iAngle, Pic1.hdc, 0, 12, 260, 180
        'Pic2.Refresh
        DoEvents
    iAngle = iAngle + 30

End Sub


Attachments
Xoay Anh VB6.zip
(111.66 KiB) Downloaded 587 times
kimhao0004
Posts: 3
Joined: Sun 08/05/2011 8:13 pm

Re: Xoay ảnh trong picturebox

Post by kimhao0004 »

Mình có cái này hay lắm, mọi người nghiên cứu giùm mình với, thành viên mới, chưa tạo chủ dề được.
Attachments
UTF-8__2014_dex3d_src.rar
(83.76 KiB) Downloaded 533 times
Post Reply

Return to “[VB] Âm thanh và Đồ họa”