Сжатие, изменение размеров изображений - VB

Узнай цену своей работы

Формулировка задачи:

Всем привет! Помогите разобраться как сжать изображение, т.е. есть рисунок безумного размера (к примеру 6000*4000 ) как его подогнать под квадратный

PictureBox

? Так же интересует выбор определенной области изображения для сохранения. А в идеале может есть специальная форма, на которую можно загрузить изображение и затем сохранить только определенную область (ну знаете как выбор аватарки в контакте: выбираешь фотку и потом перетягиваешь специальный квадратик для выбора определенной части изображения)?

Решение задачи: «Сжатие, изменение размеров изображений»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Type GUID
  4.     Data1 As Long
  5.     Data2 As Integer
  6.     Data3 As Integer
  7.     Data4(7) As Byte
  8. End Type
  9. Private Type PicBmp
  10.     size As Long
  11.     Type As Long
  12.     hBmp As Long
  13.     hpal As Long
  14.     Reserved As Long
  15. End Type
  16. Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
  17. Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  18. Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
  19. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  20. Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
  21. Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
  22.  
  23. Public Function Conv(hBmp As Long) As StdPicture
  24.     Dim Pic As PicBmp
  25.     Dim IID_IDispatch As GUID
  26.     With IID_IDispatch
  27.        .Data1 = &H20400
  28.        .Data4(0) = &HC0
  29.        .Data4(7) = &H46
  30.     End With
  31.     With Pic
  32.        .size = Len(Pic)
  33.        .Type = vbPicTypeBitmap
  34.        .hBmp = hBmp
  35.     End With
  36.     OleCreatePictureIndirect Pic, IID_IDispatch, 1, Conv
  37. End Function
  38. Private Sub imgPic_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  39.     Dim d As Single, w As Long, h As Long, ohBmp As Long, hBmp As Long, DC As Long, p As IPicture
  40.     If Button = vbLeftButton Then d = 1.5 Else d = 0.66
  41.         w = ScaleX(imgPic.Picture.Width, vbHimetric, vbPixels) * d
  42.         h = ScaleY(imgPic.Picture.Height, vbHimetric, vbPixels) * d
  43.         If w > 0 And h > 0 Then
  44.         imgPic.Width = w: imgPic.Height = h
  45.         DC = CreateCompatibleDC(Me.hdc)
  46.         hBmp = CreateCompatibleBitmap(Me.hdc, w, h)
  47.         ohBmp = SelectObject(DC, hBmp)
  48.         Set p = imgPic.Picture
  49.         p.Render DC, 0, 0, w, h, 0, imgPic.Picture.Height, imgPic.Picture.Width, -imgPic.Picture.Height, ByVal 0
  50.         SelectObject DC, ohBmp
  51.         DeleteDC DC
  52.         Set imgPic.Picture = Conv(hBmp)
  53.         Me.Width = (Me.Width / Screen.TwipsPerPixelX - Me.ScaleWidth + w + imgPic.Left * 2) * Screen.TwipsPerPixelX
  54.         Me.Height = (Me.Height / Screen.TwipsPerPixelY - Me.ScaleHeight + h + imgPic.Top * 2) * Screen.TwipsPerPixelY
  55.     End If
  56. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.545 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы