Сохранение содержимого DC в файл

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сохранение содержимого DC в файл

Сообщение AD'onis » 12.09.2007 (Ср) 21:39

Доброго времени суток всем!

Такая ситуация: есть DC, хранящий рисунок (BMP), проблема в том, что не могу найти функцию, как содержимое этого DC сохранить в файл.

Еще вопрос, думаю к теме, при считывании рисунка как узнать его размеры? Загрузка идет посредством SelectObject в DC. Искал на форуме, нашел, что вроде 19 и 23 байты отвечают за размер. Судя по всему я должен считать файл в бинарном виде. Вообще я прав? Получается, что нужно открыть файл 2 раза, некультурно как-то выходит...

Спасибо.
Господи, прошу, дай мне сорсы мира, я столько всего хочу переделать!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.09.2007 (Ср) 21:58

Содержимое DC сохраняется в файл разными путями в зависимости от того, какой результат нужно получить.
Параметры рисунка, загруженного в DC, опрашиваются через Private Declare Function GetObject Lib "gdi32.dll".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 13.09.2007 (Чт) 8:15

Спасибо за ответ.

GSerg писал(а):Содержимое DC сохраняется в файл разными путями в зависимости от того, какой результат нужно получить.

А какие результаты от сохранения можно получить? Мне просто нужно сохранить то, что было в DC. Некоторые байты после загрузки были изменены (эта тема уже поднималась), теперь нужно сохранить назад изменения (в тот же файл).
Господи, прошу, дай мне сорсы мира, я столько всего хочу переделать!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.09.2007 (Чт) 22:06

То, что в DC, находится в формате DIB или DDB. То, что на диске, находится в формате bmp, jpg, gif, tiff и т.д. И я не думаю, что под словами "сохранить обратно" разумеется дамп того, что возвращает GetDIBits.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 13.09.2007 (Чт) 23:24

Добрый вечер.
Вообще-то ужас. Можно немного попроще, тяжело такие обороты понимать. Я не знаю, в каком формате все хранится в DC, но по-моему, я постарался все объяснить достаточно понятно. Что ж попробую еще раз:
Создан CreateCompatibleDC
Посредством SelectObject в него загружен файл BMP
Операциями GetPixel и SetPixel заменены пикселы на нужные
Нужно теперь сохранить этот DC в тот же файл (заменить оригинал). Вот и все.

З.Ы. Думаю теперь уже можно не отвечать, я в бинарном виде все сделал - быстро нужно было сделать, а тут уже половина готовая была, хотел как быстрее доделать, в итоге сделал с нуля, хоть зато работает быстрее... Один только вопрос, а открыть файл в Hex-виде можно? (мож лучше новую тему для этого вопроса создать?)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.09.2007 (Чт) 23:29

а открыть файл в Hex-виде можно?


нех-вид или hex-вид? :)

В любом случае: нет - таких понятий не существует.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 13.09.2007 (Чт) 23:31

Ну в смысле мне неудобно его в бинарном читать, можно в шестнадцатеричном (во, выговорил) открыть? Вернее чтобы байты так отображались. Вот. Не все равно как-то криво спросил... :(

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 13.09.2007 (Чт) 23:35

AD'onis писал(а):Ну в смысле мне неудобно его в бинарном читать, можно в шестнадцатеричном (во, выговорил) открыть? Вернее чтобы байты так отображались. Вот. Не все равно как-то криво спросил... :(
Кхм.. ЗАЧЕМ???
Во-первых, если ты уж так хочешь байты в Hex-виде - есть ф-ция Hex()..
Во-вторых, ума не приложу, зачем это вообще может понадобиться в твоем случае.
label:
cli
jmp label

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 13.09.2007 (Чт) 23:38

Да нет, зачем именно в моем? Но мне бывает удобно так просматривать файлы (не через hex-редактор, мои ж файлы-то :))

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

Сообщение tyomitch » 14.09.2007 (Пт) 8:22

По сабжу: должно было сработать OleCreatePictureIndirect + CreateStreamOnHGlobal + IPicture::SaveAsFile
Ну, или через обёртку, там намного проще :-)
Изображение

AD'onis
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 05.10.2006 (Чт) 20:19
Откуда: не секрет, я б сказал, но забаннят

Сообщение AD'onis » 14.09.2007 (Пт) 11:33

Спасибо, попробую


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 96

    TopList