• 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...
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Xoay ảnh trong picturebox

Gửi bàigửi bởi truongphu » T.Năm 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:

Mã: Chọn hết

  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

Mã: Chọn hết

  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

Hình đại diện của người dùng
playgemboy
Thành viên danh dự
Thành viên danh dự
Bài viết: 289
Ngày tham gia: CN 13/04/2008 6:10 am
Đến từ: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Liên hệ:

Re: Xoay ảnh trong picturebox

Gửi bàigửi bởi playgemboy » T.Năm 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ự
Bài viết: 194
Ngày tham gia: T.Năm 19/04/2007 10:17 am
Đến từ: Đà Nẵng City
Been thanked: 1 time
Liên hệ:

Re: Xoay ảnh trong picturebox

Gửi bàigửi bởi giongto35 » T.Năm 15/05/2008 9:46 pm

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

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Xoay ảnh trong picturebox

Gửi bàigửi bởi truongphu » T.Sáu 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
Tập tin đính kèm
DoiXung.rar
(52.62 KiB) Đã tải 1042 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
lipton150786
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 345
Ngày tham gia: T.Năm 18/11/2010 10:00 pm
Has thanked: 3 time
Been thanked: 29 time

Re: Xoay ảnh trong picturebox

Gửi bàigửi bởi lipton150786 » T.Hai 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

Mã: Chọn hết

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


Tập tin đính kèm
Xoay Anh VB6.zip
(111.66 KiB) Đã tải 499 lần

kimhao0004
Bài viết: 3
Ngày tham gia: CN 08/05/2011 8:13 pm

Re: Xoay ảnh trong picturebox

Gửi bàigửi bởi kimhao0004 » CN 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.
Tập tin đính kèm
UTF-8__2014_dex3d_src.rar
(83.76 KiB) Đã tải 435 lần


Quay về “[VB] Âm thanh và Đồ họa”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách