Очередной вопрос про ZOOM (хочу переделать MSPaint

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Очередной вопрос про ZOOM (хочу переделать MSPaint

Сообщение SHURUP » 30.09.2004 (Чт) 10:57

Здраствуйте Уважаемые!
Может кто сталкивался cо такой штукой.
Делаю примитивный граф. редактор.
Суть проблемы такова:
Если с маштабом 1:1 - все понятно (узнал в каком месте курсор, и поставил туда точку нужного цвета), то как быть с увеличением в n раз?
Координаты можно перевести по какой-то нехитрой формуле, а вот с рисованием фигур (круг, например) возникает много проблем.
И что делать с сеткой?, если рисунок - маленький, ее можно нарисовать по циклу, но если большой - тормоза!
Вопрос туда-же: Заливка цветом при маштабе.
Может вообще не стоит использовать Picture для рабочего пространства в Пиксельном редакторе?
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.09.2004 (Чт) 14:55

Насчет Picture - почему же, используй. Тольк выключи AutoRedraw. И рисуй через API.
А какие проблемы с рисованием? Рисуешь на настоящем "дисплее", а в свой Picture ты результат только проецируешь (с нужным масштабом).
Lasciate ogni speranza, voi ch'entrate.

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 30.09.2004 (Чт) 15:37

2 alibek: Спасибо, так и сделаю!Что-то я, похоже, слегка притупил.
А насчет сетки, все-же через цикл, или более гуманный методкто-то знает?
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.09.2004 (Чт) 16:47

Да нет другого способа, линиями и через цикл. Ускорить можно, если рисовать их через API.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.09.2004 (Чт) 21:13

SHURUP писал(а):А насчет сетки, все-же через цикл, или более гуманный методкто-то знает?

Можно CreatePatternBrush и им всё залить. Должно быть офигенно быстро.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.10.2004 (Пт) 10:48

tyomitch, все может быть. Но мне кажется, что рисование линии все же побыстрее будет, чем битблиттинг.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.10.2004 (Пт) 13:54

alibek писал(а):tyomitch, все может быть. Но мне кажется, что рисование линии все же побыстрее будет, чем битблиттинг.

Да нет, не BitBlt, а FillRect... Вот пример:
Код: Выделить всё
Option Explicit

Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Private Sub Form_DblClick()
Dim hBrush As Long, hBitmap As Long, rc As RECT
hBitmap = CreateBitmap(8, 8, 1, 1, ByVal "я Ђ Ђ Ђ Ђ Ђ Ђ Ђ Ђ ")
hBrush = CreatePatternBrush(hBitmap)
DeleteObject hBitmap
SetRect rc, 0, 0, ScaleWidth / Screen.TwipsPerPixelX, ScaleHeight / Screen.TwipsPerPixelY
FillRect hDC, rc, hBrush
DeleteObject hBrush
End Sub
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 2

    TopList  
cron