Страница: 1 |
Помогите люди добрые порубить картинку из PictureBox`а на 4 картинки или хотя бы как от нее кусочек откромсать, чтоб использовать потом в качестве картинки
я думаю нужно создать массив, и считать туда по-пиксельно нужную тебе часть картинки, а потом отобразить этом масси в другой PictureBox. )) ISpy, можно и проще: to Orca: Копирование из Picture1 в Picture2 части изображения размером 100*100 пкс. Dim lColor&, x&, y& For y = 0 To 100 Вроде правильно... to sne: что эт такое и как этим пользоваться -PictureBox.PaintPicture()? Я раньше с изображениями не работал, так что знаю мало. Ну, как, берем PictureBox, и пишем Picture1.PaintPicture(...), а дальше ориентируемся по подсказке... все... Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC 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 dwRop As Long) As Long The BitBlt function performs a bit-block transfer of the color data corresponding to a rectangle of pixels from the specified source device context into a destination device context. Все-таки объясню подробнее. Берешь форму, на нее кладешь два PictureBox, кидаешь в них картинки, ставишь им AUTOREDRAW в TRUE. Далее код формы Option Explicit Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long) As Long Private Sub Form_Load() Dim ret As Long ret = BitBlt(Picture1.hDC, 20, 20, 80, 80, Picture2.hDC, 30, 30, vbSrcCopy) End Sub Поверь, это побыстрей чем циклами Забыл одну мелочь. Если хочешь нормально позиционировать картинки и правильно поделить их на части, не забудь поставить свойства PictureBox'ов ScaleMode=3 - Pixel. Все апишные функции работают только с пикселями, а в VB по дефолту стоит твип. 2 LamerOnLine, забыл еще одну мелочь - при использовании данной апи, да в общем-то и не только, из второго PictureBox'a, чтобы получить картинку, нужно будет использовать PictureBox.Image, в отличие от стандартного PictureBox.Picture... И что? В любом случае, если ты рисуешь что-либо через hDC пикчербокса, это не сохранится как Picture. Чем Image не катит? Зато работает шутрее PaintPicture, и уж тем более цикла. Кроме того, через PaintPicture ты вряд ли сумеешь вытянуть картинку из другого приложения или из того же пикчербокса, в котором рисовалось через hDC. Так что можно подумать что удобнее. Видимо, зависит от ситуации. В конце концов, никто не мешает прикольнуться подобным образом: Picture1.Picture=Picture1.Image Забавно, но работает ) Ладно, я думаю хватит об этом спорить :D Попросту я думаю, что человеку спрашивающий подобный вопрос, куда проще будет работать со стандартными VB'шными функциями, еже-ли с API, хотя если чел умеет работать с АПИ, пусть пользуется... дело вкуса и случая... Страница: 1 |
Вопрос: Как отрезать кусочек картинки?
Добавлено: 24.03.04 19:39
Автор вопроса: Orca
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
ISpy
Разработчик Offline Client
Вопросов: 47
Ответов: 621
Web-сайт:
Профиль | | #1
Добавлено: 24.03.04 19:55
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 24.03.04 20:19
Использовать PictureBox.PaintPicture()
А можно воспользоваться АПИ BitBlt() или StretchBlt()
Номер ответа: 3
Автор ответа:
ISpy
Разработчик Offline Client
Вопросов: 47
Ответов: 621
Web-сайт:
Профиль | | #3
Добавлено: 24.03.04 20:52
В обоих PictureBox'ах сделай свойство ScaleMod: 3-Pixel
For x = 0 To 100
lColor = Picture1.Point(x, y) 'Считываем пиксель из Picture1
Picture2.PSet (x, y), lColor 'и рисуем его в Picture2
Next x
Next y
Попробуй.
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 24.03.04 23:06
Номер ответа: 5
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 25.03.04 10:38
Номер ответа: 6
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #6
Добавлено: 25.03.04 10:55
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 25.03.04 11:03
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 25.03.04 11:11
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 25.03.04 11:30
Номер ответа: 10
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #10
Добавлено: 25.03.04 18:23