Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11

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

09.01.2014, 15:07. Показов 4566. Ответов 6

Студворк — интернет-сервис помощи студентам
Всем привет!
Помогите разобраться как сжать изображение, т.е. есть рисунок безумного размера (к примеру 6000*4000 ) как его подогнать под квадратный PictureBox ?
Так же интересует выбор определенной области изображения для сохранения.

А в идеале может есть специальная форма, на которую можно загрузить изображение и затем сохранить только определенную область (ну знаете как выбор аватарки в контакте: выбираешь фотку и потом перетягиваешь специальный квадратик для выбора определенной части изображения)?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2014, 15:07
Ответы с готовыми решениями:

Автоматическое изменение размеров контролов в зависимости от размеров формы
Кто-нибудь может что-то сказать по этому поводу? Я имею ввиду как этого добиться наиболее простым способом...

Изменение размеров картинки
привет друзья! есть картинка 100х100 писк. как загрузить её меньшего размера например 20х20? Form1.Picture =...

Изменение размеров дочерних форм
Проблема следующая: Когда открывается дочерняя форма в основной, то размеры её изменяются(форма растягивается). Подскажите пожалуйста как...

6
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
09.01.2014, 15:13
6*4 под квадратный подогнать можно только с искажением. Если это устроит - у Image есть свойство Stretch=True/False
1
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
09.01.2014, 15:25  [ТС]
Catstail, я знаю что есть такое свойство. Но изображение при этом сжимается только для отображения. А как сделать чтобы оно стало определенного размера (т.е. например не 6000*4000, а 600*400)?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
09.01.2014, 15:29
Это нужно сделать программно?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
09.01.2014, 15:33
PaintPicture поможет сохранить любую область и изменить размер, для сохранения соотношений сторон, можно делать как тут. Можно воспользоваться StretchBlt, тогда можно избавиться от пикселизации, либо использовать GDI+. Еще кстати можно использовать StretchDiBits или SetDiBits
2
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
09.01.2014, 17:15
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Вот пример, как можно менять само изображение (StdPicture)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Option Explicit
 
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type
Private Type PicBmp
    size As Long
    Type As Long
    hBmp As Long
    hpal As Long
    Reserved As Long
End Type
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
 
Public Function Conv(hBmp As Long) As StdPicture
    Dim Pic As PicBmp
    Dim IID_IDispatch As GUID
    With IID_IDispatch
       .Data1 = &H20400
       .Data4(0) = &HC0
       .Data4(7) = &H46
    End With
    With Pic
       .size = Len(Pic)
       .Type = vbPicTypeBitmap
       .hBmp = hBmp
    End With
    OleCreatePictureIndirect Pic, IID_IDispatch, 1, Conv
End Function
Private Sub imgPic_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim d As Single, w As Long, h As Long, ohBmp As Long, hBmp As Long, DC As Long, p As IPicture
    If Button = vbLeftButton Then d = 1.5 Else d = 0.66
        w = ScaleX(imgPic.Picture.Width, vbHimetric, vbPixels) * d
        h = ScaleY(imgPic.Picture.Height, vbHimetric, vbPixels) * d
        If w > 0 And h > 0 Then
        imgPic.Width = w: imgPic.Height = h
        DC = CreateCompatibleDC(Me.hdc)
        hBmp = CreateCompatibleBitmap(Me.hdc, w, h)
        ohBmp = SelectObject(DC, hBmp)
        Set p = imgPic.Picture
        p.Render DC, 0, 0, w, h, 0, imgPic.Picture.Height, imgPic.Picture.Width, -imgPic.Picture.Height, ByVal 0
        SelectObject DC, ohBmp
        DeleteDC DC
        Set imgPic.Picture = Conv(hBmp)
        Me.Width = (Me.Width / Screen.TwipsPerPixelX - Me.ScaleWidth + w + imgPic.Left * 2) * Screen.TwipsPerPixelX
        Me.Height = (Me.Height / Screen.TwipsPerPixelY - Me.ScaleHeight + h + imgPic.Top * 2) * Screen.TwipsPerPixelY
    End If
End Sub
Миниатюры
Сжатие, изменение размеров изображений  
Вложения
Тип файла: rar ResizeImage.rar (12.8 Кб, 98 просмотров)
1
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
10.01.2014, 09:34  [ТС]
The trick, спасибо большое!
Буду сидеть разбираться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2014, 09:34
Помогаю со студенческими работами здесь

Изменение размеров MDI формы
Вопрос : можно ли каким-то образом, запретить максимизацию MDI формы ?

Пропорциональное изменение размеров внутри формы
Как изменять размеры,положение компонентов внутри главной формы в зависемости от её размеров

Как в MSHFlexGrid отловить изменение размеров колонок?
как в MSHFlexGrid отловить событие когда мышкой изменяется размер колонки? заранее спасибо.

RUN TIME изменение пользователем размеров PICTURE в окне
Необходимо дать пользователю изменять размеры PICTURE в окне, примерно так же,как это мохно делать с формой. Возможно ли это взведением...

Динамическое изменение размеров элементов управления вместе с формой
Подскажите как привязать элементы управления к форме, чтобы при растягивании (изменении размера) формы элементы управления не стояли на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru