GDI+

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

GDI+

Сообщение drronnie » 05.04.2007 (Чт) 13:04

Не знаю, првильно ли обозвал тему... возможно не совсем и решение задачи возможно без сабжа....

Господа, такая задача:
Есть DC, на котором что-то нарисовано. Нужно сохранить картинку в память, чтобы переслать (или ещё что-нибудь сделать) и потом снова из этого блока памяти создать картинку.

Нашёл несколько вариантов:
- можно сохранить в файл, прочитать его и отправить, но что-то мне не совсем хочется так делать, ибо метод не спортивный.
- можно юзнуть Тёмычеву обёртку для gdi+, работает... но у меня два раза упала с Access violation и поэтому не хотелось бы её юзать, да плюс она без описалова...

Отсюда вопрос: может кто-то подскажет как картинку с контекста устройства сохранить в байтовый массив и как из него получить bitmap
Компиляция - перевод словесного поноса в машинный код.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.04.2007 (Чт) 13:11

GetDIBits, SetDIBits и вокруг и около...
Весь мир матрица, а мы в нем потоки байтов!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: GDI+

Сообщение Andrey Fedorov » 05.04.2007 (Чт) 14:04

drronnie писал(а):Отсюда вопрос: может кто-то подскажет как картинку с контекста устройства сохранить в байтовый массив и как из него получить bitmap


Посмотри в кирпичах - один из последних - там все в исходниках.

Там есть функции SavePictureToBytes и LoadPictureFromBytes - может устроят...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Re: GDI+

Сообщение tyomitch » 05.04.2007 (Чт) 14:34

drronnie писал(а):- можно юзнуть Тёмычеву обёртку для gdi+, работает... но у меня два раза упала с Access violation и поэтому не хотелось бы её юзать, да плюс она без описалова...

А если рассказать её автору, в каких случаях она падает, чтобы он смог её исправить, то выиграют сразу все её пользователи...
Изображение

bedbug
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 15.11.2007 (Чт) 0:02

Сообщение bedbug » 15.11.2007 (Чт) 1:33

Воспользуюсь общим названием темы, задам здесь вопрос про GDI+.

Правильно ли я понимаю, что глубина цвета задается в EncoderParameter при сохранении в файл и соответственно доступно это не для любого формата?

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

Сообщение tyomitch » 15.11.2007 (Чт) 8:03

Неправильно, она выбирается при создании объекта Bitmap
Изображение

bedbug
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 15.11.2007 (Чт) 0:02

Сообщение bedbug » 15.11.2007 (Чт) 17:39

Через обертку, пробовал так

Код: Выделить всё
Set img = CreateImage(img_in_path)
  img.GetThumbnailImageEx(img.Width, img.Height, InterpolationModeDefault, PixelFormat16bppGrayScale).Save img_out_path, "image/bmp"

OutOfMemory. Через Clonе тоже самое.

А есои создать пустой bitmap с помощью
Set img = CreateBitmap(100, 100, PixelFormat16bppGrayScale)
как тогда из друго Image изображение поместить?

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

Сообщение tyomitch » 16.11.2007 (Пт) 12:10

bedbug, кажется была у меня такая бага... Попробуй с последней версией (в аттаче)
Вложения
gdi+.zip
(73.39 Кб) Скачиваний: 86
Изображение

bedbug
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 15.11.2007 (Чт) 0:02

Сообщение bedbug » 16.11.2007 (Пт) 15:37

Спасибо, попробовал, но результат тот же с PixelFormat16bppGrayScale.
С PixelFormat16bppRGBxxx, PixelFormat24bppRGB работает.
Но я все ищу способ по конвертированию в indexed colors (до 256 цветов, например). Есть в GDI+ такие функции с генерацией оптимальной палитры?

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

Сообщение tyomitch » 16.11.2007 (Пт) 17:42

bedbug писал(а):Но я все ищу способ по конвертированию в indexed colors (до 256 цветов, например). Есть в GDI+ такие функции с генерацией оптимальной палитры?

Нету. Только с запихиванием в фиксированную "web-safe" палитру.

Можешь взять в проектах (отдельно) мои octree-палитризатор и сохранялку в GIF без нарушения палитры.

Дебажить свою обёртку я временно не могу, т.к. не имею доступа к её исходникам. Так что что есть, то есть :-|
Изображение


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

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

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

    TopList  
cron