Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как отрезать кусочек картинки? Добавлено: 24.03.04 19:39  

Автор вопроса:  Orca

Помогите люди добрые порубить картинку из PictureBox`а на 4 картинки или хотя бы как от нее кусочек откромсать, чтоб использовать потом в качестве картинки

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #1
Добавлено: 24.03.04 19:55

я думаю нужно создать массив, и считать туда по-пиксельно нужную тебе часть картинки, а потом отобразить этом масси в другой PictureBox.

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 24.03.04 20:19

:))) ISpy, можно и проще:
Использовать PictureBox.PaintPicture()

А можно воспользоваться АПИ BitBlt() или StretchBlt()

Ответить

Номер ответа: 3
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #3
Добавлено: 24.03.04 20:52

to Orca:

Копирование из Picture1 в Picture2 части изображения размером 100*100 пкс.
В обоих PictureBox'ах сделай свойство ScaleMod: 3-Pixel

Dim lColor&, x&, y&

For y = 0 To 100
 For x = 0 To 100
  lColor = Picture1.Point(x, y) 'Считываем пиксель из Picture1
  Picture2.PSet (x, y), lColor  'и рисуем его в Picture2
 Next x
Next y

Вроде правильно...
Попробуй.

to sne: что эт такое и как этим пользоваться -PictureBox.PaintPicture()? Я раньше с изображениями не работал, так что знаю мало. 

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 24.03.04 23:06

Ну, как, берем PictureBox, и пишем Picture1.PaintPicture(...), а дальше ориентируемся по подсказке... все...

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 25.03.04 10:38

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.

Ответить

Номер ответа: 6
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 25.03.04 10:55

Все-таки объясню подробнее.

Берешь форму, на нее кладешь два 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

Поверь, это побыстрей чем циклами :)

Ответить

Номер ответа: 7
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 25.03.04 11:03

Забыл одну мелочь. Если хочешь нормально позиционировать картинки и правильно поделить их на части, не забудь поставить свойства PictureBox'ов ScaleMode=3 - Pixel.

Все апишные функции работают только с пикселями, а в VB по дефолту стоит твип.

Ответить

Номер ответа: 8
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #8
Добавлено: 25.03.04 11:11

2 LamerOnLine, забыл еще одну мелочь - при использовании данной апи, да в общем-то и не только, из второго PictureBox'a, чтобы получить картинку, нужно будет использовать PictureBox.Image, в отличие от стандартного PictureBox.Picture...

Ответить

Номер ответа: 9
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #9 Добавлено: 25.03.04 11:30

И что? В любом случае, если ты рисуешь что-либо через hDC пикчербокса, это не сохранится как Picture. Чем Image не катит? Зато работает шутрее PaintPicture, и уж тем более цикла.

Кроме того, через PaintPicture ты вряд ли сумеешь вытянуть картинку из другого приложения или из того же пикчербокса, в котором рисовалось через hDC.

Так что можно подумать что удобнее. Видимо, зависит от ситуации.

В конце концов, никто не мешает прикольнуться подобным образом:

Picture1.Picture=Picture1.Image

Забавно, но работает :))

Ответить

Номер ответа: 10
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #10
Добавлено: 25.03.04 18:23

Ладно, я думаю хватит об этом спорить :D Попросту я думаю, что человеку спрашивающий подобный вопрос, куда проще будет работать со стандартными VB'шными функциями, еже-ли с API, хотя если чел умеет работать с АПИ, пусть пользуется... дело вкуса и случая...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам