Размер "холста".

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 311
Зарегистрирован: 13.10.2013 (Вс) 14:05

Размер "холста".

Сообщение Don Leno » 05.12.2016 (Пн) 17:58

Вопрос насчет апи CreateCompatibleDC. В эту апи передается контекст DC формы или PictureBox. То после создания совместимого DC, его размер будет равен ширине и высоте DC формы?
Пример:
Форма по высоте и ширине =100 пикселей
Код: Выделить всё
hst = CreateCompatibleDC(Me.hdc)

То теперь DC созданое тоже имеет ширину и высоту в 100 пикселей?
*И еще вопрос, если размеры "холста" зависят от передаваемого ему DC формы, как создать DC с размером больше чем 100 пикселей?

The trick
Постоялец
Постоялец
 
Сообщения: 512
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Размер "холста".

Сообщение The trick » 05.12.2016 (Пн) 20:11

DC не имеет размеров которые ты подразумеваешь :D , размеры имеет изображение выбранное в этот DC. Контекст отдаленно можно представить структурой которая содержит текущее состояние поверхности рисования (устройство вывода, битмап, перо, кисть, трансформации, режим наложения и т.д.)
Для создания именно битмапа на который будут воздействовать функции рисования есть несколько функций CreateCompatibleBitmap, CreateBitmap, CreateDIBSection, CreateDIBitmap.
UA6527P

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 311
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Размер "холста".

Сообщение Don Leno » 05.12.2016 (Пн) 20:23

То есть все зависит от битмапа который я буду выбирать для DC? Так как это сделать правильно?
Мне просто необходимо создать область например 1000*1000 пикселей куда я и буду рисовать всю графику

The trick
Постоялец
Постоялец
 
Сообщения: 512
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Размер "холста".

Сообщение The trick » 05.12.2016 (Пн) 20:30

Don Leno писал(а):То есть все зависит от битмапа который я буду выбирать для DC? Так как это сделать правильно?
Мне просто необходимо создать область например 1000*1000 пикселей куда я и буду рисовать всю графику

Создаешь через вышеуказанные функции битмап нужного размера, и выбираешь его в созданный DC (не забыв либо сохранить все состояние, либо только предыдущий выбранный битмап), рисуешь. В конце восстанавливаешь изначальное состояние.
UA6527P

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 311
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Размер "холста".

Сообщение Don Leno » 05.12.2016 (Пн) 20:32

То есть:
Создаю совместимый контекст
Создаю через CreateBitmap чистый рисунок с размерами
Через SelectObject задаю контексту битмап
правильно?
Только я не знаю как создать чистый рисунок?))

The trick
Постоялец
Постоялец
 
Сообщения: 512
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Размер "холста".

Сообщение The trick » 05.12.2016 (Пн) 20:39

Don Leno писал(а):То есть:
Создаю совместимый контекст
Создаю через CreateDIBSec & CreateBitmap чистый рисунок с размерами
Через SelectObject задаю контексту битмап
правильно?

Don Leno писал(а):CreateDIBSec или CreateBitmap или ...

Потом рисуешь используя этот DC. Далее восстанавливаешь его. Вот пример. viewtopic.php?f=15&t=45321
UA6527P

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 311
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Размер "холста".

Сообщение Don Leno » 05.12.2016 (Пн) 20:40

Все понял!! CreateCompitableDC и потом устанавливаем ширину и высоту через CreateCompitableBitmap у него есть эти параметры! Тем более на сайте написано что SelectObject работает быстрее с совместимыми битмапа чем с CreateBitmap. Все верно?

Код: Выделить всё
    tDc = CreateCompatibleDC(frmTest.hdc)
    bBmp = CreateCompatibleBitmap(frmTest.hdc, w, h)
    oBmp = SelectObject(tDc, bBmp)

Только не понял про "восстанавливаю"??
ReleaseDc?

The trick
Постоялец
Постоялец
 
Сообщения: 512
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Размер "холста".

Сообщение The trick » 05.12.2016 (Пн) 21:08

Don Leno писал(а):устанавливаем ширину и высоту через CreateCompitableBitmap у него есть эти параметры!

Не устанавливаем, а создаем новый битмап.
Don Leno писал(а):Тем более на сайте написано что SelectObject работает быстрее с совместимыми битмапа чем с CreateBitmap. Все верно?

С одинаковым форматом битмапа работает быстрее.[/quote]
Don Leno писал(а):Только не понял про "восстанавливаю"??
ReleaseDc?

В этом случае SelectObject tDc, oBmp
UA6527P

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 311
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Размер "холста".

Сообщение Don Leno » 06.12.2016 (Вт) 15:57

Спасибо Трик ты меня выручил очень))))


Вернуться в Мультимедиа

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList