Копирование изображения

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

Модератор: Mikle

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Копирование изображения

Сообщение d3drm » 04.04.2004 (Вс) 15:54

нужно скопировать изображение в буффер обмена или сохранить в файл из Device'a.

То есть ДО переноса изображения на передний буффер (device.present) нужно достать все, что там прорисовано, то есть картинку с заднего буффера и сохранить ее. Или просто как-нить достать. Кто что скажет???
ХЎ

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 04.04.2004 (Вс) 21:35

Если это про скриншоты, тогда здесь, в принципе должно и для и заднего и для переднего:
http://bbs.vbstreets.ru/viewtopic.php?t=2774
исправно работает на Дикс7

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 05.04.2004 (Пн) 10:16

Я в DX8 делаю скриншот так.
В декларациях:
Код: Выделить всё
    Dim ScrShot As Direct3DSurface8
    Dim tmpPAL As PALETTEENTRY
    Dim tmpRECT As RECT

В инициализации D3D:
Код: Выделить всё
    tmpRECT.Left = 0
    tmpRECT.Top = 0
    tmpRECT.Right = WinDx
    tmpRECT.bottom = WinDy

Собственно сам скриншот:
Код: Выделить всё
    Set ScrShot = d3dDevice.GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO)
    d3dx.SaveSurfaceToFile App.Path & "\screen.bmp", D3DXIFF_BMP, ScrShot, tmpPAL, tmpRECT
    Set ScrShot = Nothing

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 09.04.2004 (Пт) 18:39

Все зашибись работает, а из поверхности можно сделать текстуру?
ХЎ

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 11.04.2004 (Вс) 0:48

Прежде поздравляю ВСЕХ со Святой Пасхой и Великим Воскресением!!!

d3drm писал(а):Все зашибись работает, а из поверхности можно сделать текстуру?


Я увидел тему про зеркала..., подумаю.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.04.2004 (Вт) 12:54

Так бы сразу сказал, что нужен рендер в текстуру. Если рендерить в спец. сурфейс, а потом перекачивать в текстуру - лишняя трата времени. Нужно НАЗНАЧАТЬ сурфейсом для рендера прямо верхний план в текстуре. Вот пример (5кБ):

http://www.tuapse-mikle.narod.ru/rt.zip

Вот чего я не смог добиться, это мип-маппинга полученой текстуры с приемлемой скоростью (в примере UseMip=True). Для зеркала сойдет и так (Min и Mag фильтры работают), хоть под каким углом к камере оно стоит, лишь бы не кривое зеркало. А вот чтобы изобразить экран монитора под углом мип-маппинг уже желателен.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Копирование изображения

Сообщение longwair » 18.12.2015 (Пт) 5:41

Делаю рендер в PictureBox. Как сохранить Картинку из PictureBox в файл?
Выше приведённый код выдаёт ошибку
Код: Выделить всё
    Set ScrShot = d3dDevice.GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO)
    d3dx.SaveSurfaceToFile App.Path & "\screen.bmp", D3DXIFF_BMP, ScrShot, tmpPAL, tmpRECT
    Set ScrShot = Nothing

И как бы понятно что код делает скрин с формы а не с бокса, но где и как прописать с чего делать скрин не пойму.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Копирование изображения

Сообщение Mikle » 18.12.2015 (Пт) 9:18

longwair писал(а):Делаю рендер в PictureBox. Как сохранить Картинку из PictureBox в файл?
Выше приведённый код выдаёт ошибку

То есть, пока рендер был на форму, всё работало, а как переместил на PictureBox, перестало? Или на форму не проверял?
Вообще, скриншот делается не с формы, и не с PictureBox, а с бэкбуфера Direct3D.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Копирование изображения

Сообщение longwair » 18.12.2015 (Пт) 16:11

Да именно так, С формы скрин снимается а с PictureBox не хочет.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Копирование изображения

Сообщение Mikle » 19.12.2015 (Сб) 14:47

Завтра с утра посмотрю, пока работаю с утра до вечера.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Копирование изображения

Сообщение Mikle » 20.12.2015 (Вс) 10:27

У меня всё работает, проект прилагаю. Клик по картинке - скриншот.
Проверь, что у PictureBox свойства правильные (ScaleMode, AutoRedraw)
У вас нет доступа для просмотра вложений в этом сообщении.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Копирование изображения

Сообщение longwair » 21.12.2015 (Пн) 3:27

Оказалось что tmpRECT.Right и tmpRECT.bottom больше чем ScaleHeight и ScaleWidth. Mikle как всегда спасибо!
Ещё вопрос Картинка сохраняется в *.bmp файл, за это отвечает D3DXIFF_BMP. При выборе D3DXIFF_JPG тоже выдает ошибку. В чём может быть причина? Или надо ещё какой код дописывать что бы сохранять в JPG.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Копирование изображения

Сообщение Mikle » 21.12.2015 (Пн) 9:18

На сколько помню - кроме BMP, всё остальное - это заглушки для совместимости в будущем.
В JPG и т. п. форматы можно сохранять с помощью GDI+, "локать" полученный сурфейс, дальше сохранять.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Копирование изображения

Сообщение longwair » 21.12.2015 (Пн) 13:08

BMP и DDS сохраняет. Значит будем GDI+ пробовать. Спасибо за ответы!
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/


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

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

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

    TopList