Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как загрузить картинку в компонент 
:(
    Опции темы
Emulator
Дата 30.4.2004, 18:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как загрузить картинку в компонент
ImageList так чтобы она имела свойство прозрачности.


var BMP:TBitmap;

BMP:= TBitmap.Create;
BMP.LoadFromFile(MFile);
Immages.Add(BMP,BMP);
BMP.Free;
  Вверх
_hunter
Дата 30.4.2004, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



DrawingStyle = dsTransparent?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Emulator
Дата 30.4.2004, 22:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нет нужно чтоб розовый фон вокруг картинки был невидим
  Вверх
Medved
Дата 1.5.2004, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Нижний левый пиксель, всегда является цветом прозрачности.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Emulator
Дата 1.5.2004, 17:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











И что дальше делать ?
  Вверх
Medved
Дата 2.5.2004, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



А ничего.
Повторюсь, если вы хотите сделать какие-либо области прозрачными, закрасте их таким цветом, какой в нижнем левом пикселе картинки. Ну а затем загрузите этот битмап в TImageList и радуйтесь результату.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
z-END
Дата 2.5.2004, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



А че серьезно нижний левый?
А я то постоянно к верхнему левому привязывал ну [1,1] типа. withstupid.gif


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
p0s0l
Дата 2.5.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



nJIaKca.spb, да серьёзно. Видимо у тебя эти два пиксела всегда совпадали...


--------------------
С уважением, г-н Посол.
PM   Вверх
Emulator
Дата 3.5.2004, 06:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А как определить Цвет Картинки ?
  Вверх
x77
Дата 3.5.2004, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



Pegas, p0s0l, с чего это левый нижний? битмапы бывают двух разных видов, top-down и bottom-up, что соответствует порядку загрузки "строк" пикселей. по умолчанию (т.е. TransparentMode = tmAuto) прозрачность определяет первый пиксел в массиве данных, который может быть как левым нижним, так и левым верхним, в зависимости от типа битмапа. помимо режима по умолчанию, есть режим принудительный, tmFixed, если мне не изменяет память, который включается автоматом при установке свойства TransparentColor.

это означает, что если надо сделать розовый цвет прозрачным, надо просто сказать Bmp.TransparentColor := clFuchsia

Добавлено @ 16:23
Emulator, а что считается "цветом картинки"? smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
p0s0l
Дата 3.5.2004, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



x77, конечно, всё это очень поучительно... Но либо я такой отставший от жизни, либо ты заблуждаешься. Почему-то ниразу мне не приходилось за прозрачность брать левый верхний символ - или вымерли bmp такого вида ?
Кстати, бывает иногда полезно заглянуть в хелп:
Цитата
When TransparentMode is set to tmAuto (the default), the TransparentColor property returns the color of the bottom-leftmost pixel of the bitmap image.

Нигде нет оговорки про зависимость от формата bmp-шки.

Ладно, что там гадать - взял файл "a.bmp" - скопировал его в файл "b.bmp", в Hex-Edit'е поменял свойство Height на отрицательное (было 80h, стало FFFFFF80h), проверил в ACDSEE - теперь одна картинка стала перевернутой копией другой. Загружал эти две картинки в TImage, TImageList - в обоих случаях берется левый нижний пиксел битмапа, независимо от того, перевернутый битмап или нет. Так что твои суждения оказались неверными насчет первого байта данных...




--------------------
С уважением, г-н Посол.
PM   Вверх
Emulator
Дата 3.5.2004, 18:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Народ Так как Определить Цвет (Левый верхний) ? Если можно то кодом.
  Вверх
p0s0l
Дата 3.5.2004, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



У ImageList свойство Masked должно быть True.
Свойство DrawingStyle оставь по-умолчанию - dsNormal.

Вместо ImageList.Add(Bmp, Bmp) делай так:
ImageList1.AddMasked(Bmp, Bmp.Canvas.Pixels[0, 0]); - тогда верхний левый пиксел будет определять цвет прозрачности
или же можешь принудительно задать цвет прозрачности:
ImageList1.AddMasked(Bmp, clFuchsia);



--------------------
С уважением, г-н Посол.
PM   Вверх
Emulator
Дата 3.5.2004, 22:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо Посол!
  Вверх
x77
Дата 4.5.2004, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



p0s0l, правильно, давай друг друга справками давить:

Цитата

Determines which color of the bitmap is to be transparent when the bitmap is drawn.

property TransparentColor: TColor;

Description

Use TransparentColor to determine how to draw the bitmap transparently. When the TransparentMode property is set to tmAuto (default), TransparentColor returns the color of the first pixel in the bitmap image data. For "bottom-up" bitmaps, the first pixel is the bottom leftmost pixel shown onscreen. For "top-down" bitmaps (less common), the first pixel is in the top left corner shown onscreen.

If TransparentColor is assigned, the TransparentMode is automatically set to tmFixed so that the new transparent color can be used later. If you want TransparentColor to disregard any assignments and return the bottom leftmost pixel color again, set TransparentMode to tmAuto.


ты "свою" справку дочитай до конца: TransparentMode определяет, является ли цвет прозрачности высчитываемым автоматически, или берётся из фиксированного значения в битмапе. если он равен tmFixed, то он берётся либо из левого нижнего, либог из левого верхнего в зависимости от типа битмапа. установка свойства TransparentColor автоматом ставит TransparentMode в tmFixed, запрещая, таким образом, автоматическое определение цвета прозрачности.

со справкой разобрались. теперь разберёмсяс кодом:

Код

function TCustomImageList.AddMasked(Image: TBitmap; MaskColor: TColor): Integer;
var
 ImageDDB: TBitmap;
begin
 ImageDDB := TBitmap.Create;
 try
   if Masked and (MaskColor <> -1) then
   begin
     with TBitmap.Create do
     try
       Assign(Image);

       { обрати внимание на следующую строчку }
       TransparentColor := MaskColor;

       Self.HandleNeeded;
       Result := ImageList_Add(Self.FHandle, GetImageHandle(Image, ImageDDB),
         GetBitmapHandle(MaskHandle));
     finally
       Free;
     end;
   end
   else Result := ImageList_Add(Handle, GetImageHandle(Image, ImageDDB), 0);
 finally
   ImageDDB.Free;
 end;
 Change;
end;


что разницы нет, сказать Bmp.TransparentColor := clFuchsia, как изначально предлагал я, или ImageList.AddMasked (Bmp, clFuchsia), как предлагаешь ты. и в чём моё заблуждение - я пока так и не понял.

смысла твоих манипуляций с HexEdit'ом я, если честно, тоже не понял. sad.gif

Это сообщение отредактировал(а) x77 - 4.5.2004, 10:34


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.