Как задать палитру рисунка?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ducis
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 24.04.2002 (Ср) 15:36

Как задать палитру рисунка?

Сообщение Ducis » 05.10.2003 (Вс) 9:32

BMP файл (24 b) загружается в PictureBox:
Picture1.Picture = LoadPicture(FileName)
В Picture картинка превращается в уродство - остается 16 цветов, после чего все полутона рваные и т.д.
Задавать параметр ColorDepth (LoadPicture([FileName], [Size], [ColorDepth],[X,Y])) бесполезно - он относится к иконкам, курсорам.
Я думаю, что необходимо где-то указать палитру, подскажите, плз., где.
Понимаешь? (с)Б.Ельцин.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 05.10.2003 (Вс) 11:47

Хммм... Странно, у меня всё нормально загружается... Может, скинешь свой проект мне на мыло и я на него посмотрю?

svinets@rambler.ru

Ducis
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 24.04.2002 (Ср) 15:36

Сообщение Ducis » 05.10.2003 (Вс) 16:39

Amed писал(а):Может, скинешь свой проект мне на мыло и я на него посмотрю?


Тут проект нипричем. Помести на форму PictureBox и кнопку. Вставь в кнопку Picture1.Picture = LoadPicture(FileName), вот и весь проект.
Я же не говорил, что не грузится, я говорил, что в результате загрузки корявый рисунок выходит.
Сделай рисунок с градиентной заливкой, например от светлоголубого до синего и вставь его в PictureBox.
Я тебе лучше рисунок пришлю.
Понимаешь? (с)Б.Ельцин.

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Re: Как задать палитру рисунка?

Сообщение Taras2 » 06.10.2003 (Пн) 8:41

Ducis писал(а):BMP файл (24 b)

^^^^^^^^^^^ В нём палитры нет!
Ducis писал(а): загружается в PictureBox:
Picture1.Picture = LoadPicture(FileName)
В Picture картинка превращается в уродство - остается 16 цветов, после чего все полутона рваные и т.д.

Если в свойствах экрана (настройки виндовс) не указано 24бит (тру колор), то виндовс исходя из цветов, которые используют другие окна, старается отобразить основные цвета (формат БМП) картинки, если на них палитры не хватает, то отображаются близкие цвета.

Ducis
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 24.04.2002 (Ср) 15:36

Re: Как задать палитру рисунка?

Сообщение Ducis » 09.10.2003 (Чт) 13:02

Taras2 писал(а):
Ducis писал(а):BMP файл (24 b)

^^^^^^^^^^^ В нём палитры нет!

А кто сказал, что палитра в нем?

Taras2 писал(а):
Ducis писал(а): загружается в PictureBox:
Picture1.Picture = LoadPicture(FileName)
В Picture картинка превращается в уродство - остается 16 цветов, после чего все полутона рваные и т.д.

Если в свойствах экрана (настройки виндовс) не указано 24бит (тру колор), то виндовс исходя из цветов, которые используют другие окна, старается отобразить основные цвета (формат БМП) картинки, если на них палитры не хватает, то отображаются близкие цвета.

Хорошо, почему в Paint отображаются оттенки рисунка при High Color (16 b), понятно, что не идеально, но плавно. А в PictureBox тот же рисунок превращается в уродство с рваными градиентами?
И еще. Если рисунок загнать в gif (256 цветов), то его вид в Photo Shop значительно лучше чем в PictureBox. Тут уже вообще 256 цветов. Хотя в последнем случае вид рисунка в PictureBox лучше, чем когда добавлять BMP. Но у меня 3 сотни рисунков, перегонять все в gif вломно.
Понимаешь? (с)Б.Ельцин.

Ducis
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 24.04.2002 (Ср) 15:36

Сообщение Ducis » 09.10.2003 (Чт) 13:15

А по поводу указания палитр в языках программирования (а не для рисунков :-) ):
в PHP есть две функции создания рисунка: ImageCreate и ImageCreateTrueColor (улавливаете).
А вот уже цитата из справочника по VB:

Palette свойство
Возвращает или устанавливает изображение, которое содержит палитру, используемую для элемента управления.

Только куда мне его прикрутить и как? Я этим в VB никогда не занимался.
Понимаешь? (с)Б.Ельцин.

Ducis
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 24.04.2002 (Ср) 15:36

Сообщение Ducis » 10.10.2003 (Пт) 11:10

Вот цитата из хелпа по VB:
Функция LoadPicture
LoadPicture([FileName], [Size], [ColorDepth],[X,Y])
FileName-Необязательный параметр. Строковая переменная, определяющая имя загружаемого графического файла. Может включать имя папки и диска. Если не указано значение файла, то функция LoadPicture очищает элементы управления Image или PictureBox
Size-Необязательный параметр типа Variant. Если FileName является курсором или значком файла, то параметр определяет желаемый размер изображения. Допустимые значения приведены в таблице установок
ColorDepth-Необязательный параметр типа Variant. Если FileName является курсором или значком файла, то параметр определяет желаемую глубину цвета. Допустимые значения приведены в таблице установок...
Исходя из этого следует, что используя ColorDepth можно менять палитру (глубину цвета) хотябы иконок. Использую константы для ColorDepth -
vbLPDefault = 0 - Оптимальное значение при использовании определенных файлов
vbLPMonochrome = 1 - 2 цвета
vbLPVGAColor = 2 - 16 цветов
vbLPColor = 3 - 256 цветов
Но изменений никаких. Почему?
Понимаешь? (с)Б.Ельцин.

Ducis
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 24.04.2002 (Ср) 15:36

Сообщение Ducis » 10.10.2003 (Пт) 14:25

Да, еще.
Кто-то баловался св-вами формы Palette и PaletteMode? В теории все ОК. А на практике у меня нет никакой разницы между изображениями, загружаемыми в форму при разных значениях этих св-в. Задаю для формы значение св-ва Palette равным необходимому файлу. А после загрузки рисунка в форму все равно уродство. Более того, как я уже сказал, на вид загружаемого изображения никак эти св-ва не влияют.
???
Понимаешь? (с)Б.Ельцин.

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 12.10.2003 (Вс) 13:06

Мля, да пойми ты, что у тебя в рисунках нет палитры, да собственно говоря и нет основных цветов. Поэтому виндовс отображает цвета по своему усмотрению. Расчитаны они на тру колор экран.
При переводе рисунков в 16 бит или 8 бит появляются как палитра, так и !основные цвета!
Фотож.п как и паинт - приложения, и они могут указать виндовс какие цвета приоритетные, и что можно "забить" на красивую рамку окна. У тебя же нет как палитры, так и приоритетных цветов, и твоё приложение не говорит виндовс - умри, но отобрази красиво рисунок.
Тебе нужно
1. сформировать основные цвета для рисунка.
2. подправить палитру виндовс.
3. Следить за палитрой виндовс.

или найти компонет, который сделает это за тебя.
Да, кстати у меня кроме пикчебокс, есть еще компонент Image, его не пробовал?

Ducis
Бывалый
Бывалый
 
Сообщения: 232
Зарегистрирован: 24.04.2002 (Ср) 15:36

Сообщение Ducis » 13.10.2003 (Пн) 10:27

Все что было сказано выше мной и Ко :-) было красиво, но жизнь оказалась гораздо интересней. Когда я перевел все рисунки в 15b (High Color) все стало прекрасно. При этом экранные установки никак не влияли на отображение рисунков в PictureBox. Т.е. никакие комбинации экранных установок не повлияли на качество отображения. Помог перевод рисунков в 15b. Вывод, который сделал я - Picture Box не может корректно работать с True Color.
Понимаешь? (с)Б.Ельцин.


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

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

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

    TopList