• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Xoay ảnh trong picturebox

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

Xoay ảnh trong picturebox

Postby truongphu » Thu 15/05/2008 8:35 pm

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

  1. Private Sub Command1_Click()
  2. Dim sHeigh As Integer
  3. Dim sWidth As Integer
  4. Picture1.ScaleMode = 3
  5. Picture2.ScaleMode = 3
  6. Picture1.AutoSize = True
  7. Picture2.Move Picture1.Left, Picture1.Top + Picture1.Height, Picture1.Width, Picture1.Height
  8. sHeigh = Picture1.ScaleHeight
  9. sWidth = Picture1.ScaleWidth
  10.  
  11. For i = sHeigh To 1 Step -1
  12.     For j = 1 To sWidth
  13.         Picture2.PSet (i, sHeigh - j), Picture1.Point(i, j)
  14.     Next j
  15. Next i
  16. End 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

  1. 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 Long
  2. Private Sub Command1_Click()
  3. Picture1.ScaleMode = 3 ' pixels
  4. Call StretchBlt(Picture1.hdc, Picture1.ScaleWidth, 0, Picture1.ScaleWidth * -1, Picture1.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, &HCC0020)
  5. End Sub
  6. Private Sub Command2_Click()
  7. Picture1.ScaleMode = 3 ' pixels
  8. Call StretchBlt(Picture1.hdc, 0, Picture1.ScaleHeight, Picture1.ScaleWidth, Picture1.ScaleHeight * -1, Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, &HCC0020)
  9. 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

Postby playgemboy » Thu 15/05/2008 9:36 pm

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

Postby giongto35 » Thu 15/05/2008 9:46 pm

Còn code em đâu T_T
________________________________________________________________________________________________
. . . . . . . . . . . . .. .

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Xoay ảnh trong picturebox

Postby truongphu » Fri 16/05/2008 8:07 am

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 1105 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: 29 times

Re: Xoay ảnh trong picturebox

Postby lipton150786 » Mon 21/03/2011 5:40 pm

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 560 times

kimhao0004
Posts: 3
Joined: Sun 08/05/2011 8:13 pm

Re: Xoay ảnh trong picturebox

Postby kimhao0004 » Sun 22/05/2011 9:46 am

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 510 times


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

Who is online

Users browsing this forum: No registered users and 0 guests