Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2009, 22:12   #11
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Народ, может вопрос Вам покажется странным, но объясните пожалуйста, что такое альфа канал и изображение с альфа эффектом.
Читал в инете, но там как то тяжело написано. Объясните это как то по проще.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 10.09.2009, 22:37   #12
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию


Вверху изображение, внизу альфа-канал.
Чёрный цвет - прозрачность 100%, белый - 0%

24-битное изображение содержит 3 канала по 8 бит (красный/зелёный/синий)
32-битное - 4 канала по 8 бит (красный/зелёный/синий + прозрачность)
пыщь
JTG вне форума Ответить с цитированием
Старый 10.09.2009, 23:54   #13
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
объясните пожалуйста, что такое альфа канал и изображение с альфа эффектом
Просто полупрозрачная картинка...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 11.09.2009, 11:36   #14
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию


Точно, как кайфово...
Смущает только, что на исходной картинке полно всякого "мусора" (
Ну а в Delphi то как это реализовать? Как обработать картинку с альфа каналом?

2spamer. Alpha канал - это значение, которое характеризует прозрачность пикселя при прорисовке.

//А чё собственно PNG сложнее? Из-за того, что там сжатие?
Altera вне форума Ответить с цитированием
Старый 11.09.2009, 11:45   #15
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Ну а в Delphi то как это реализовать? Как обработать картинку с альфа каналом?
Помните у меня была загвоздка, изображение сохранялось 32-х битным. Так вот, если сохранять Image1.Picture.SaveToFile, то сохраняется 32 бита. В Timage используются следующая маска цветов: Tcolor:=$PPBBGGRR, где PP - прозрачность, BBGGRR- цвет.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 11.09.2009, 12:27   #16
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Вот написал
Код:
procedure Tmain_form.FormPaint(Sender: TObject);
begin
   canvas.Brush.Color := $00FFCC10;
   canvas.FillRect(rect(10, 10, 100, 100));
   canvas.Brush.Color := $44DDDD10;
   canvas.FillRect(rect(50, 50, 140, 140));
end;
И ничего не получается:
Altera вне форума Ответить с цитированием
Старый 11.09.2009, 13:07   #17
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Сомневаюсь что обычный TImage из Делфи 7 способен нормально выводить 32-хбитные изображения...
Я обычно делаю Win32API функцией Windows.AlphaBlend...

Недавно что-то похожее писал... С цитатой...

Пример:
Код:
Var bf: BLENDFUNCTION; Bitmap: TBitmap;

...

Procedure PremultAlpha(b: TBitmap);
Var i: Integer; q: PRGBQuad;
Begin
q:=b.Scanline[b.Height-1];
For i:=0 To b.Height*b.Width-1 Do
      Begin
      q.rgbBlue:=q.rgbBlue*q.rgbReserved shr 8;
      q.rgbGreen:=q.rgbGreen*q.rgbReserved shr 8;
      q.rgbRed:=q.rgbRed*q.rgbReserved shr 8;
      Inc(q);
      End;
End;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
bf.BlendOp:=AC_SRC_OVER;
bf.BlendFlags:=0;
bf.AlphaFormat:=AC_SRC_ALPHA;
bf.SourceConstantAlpha:=255;
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('C:\Picture_32bit.bmp'); // 32-хбитное изображение
PremultAlpha(Bitmap);
End;

procedure TForm1.FormPaint(Sender: TObject);
begin
Windows.AlphaBlend(Form1.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, bf);
end;
А так можно просто переделать картинку в 24-битный jpg, например...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 11.09.2009, 14:01   #18
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Ребята, что-то вас в сторону занесло

Возвращаемся в тулбару аля юТоррент с картинками из 32 битного битмапа. Почему так? Да потому что художества в Дельфи, и иконки на тулбаре это несколько разные вещи. Поговорим про иконки. Во первых насчет версии Дельфи, не знаю что там у вас 7-я версия не может, но 32bit иконки как в TImage, так и в тулбарах отображаются нормально. Однако, все что я скажу дальше, относится к 2009-й Дельфи, хотя может работать и в седьмой, не проверял, оставляю это вам.

А теперь, о том, как сделать такой тулбар. Идем в пост №7 этой темы, и выполняем все что там написано. Тулбар с 12 кнопками понятное дело уже должен быть на форме. Имиджлист также на форме, пустой.

Вот код:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  buf, tmp: TBitmap;
  i: integer;
begin
  ImageList1.Width:=24;
  ImageList1.Height:=24;
  ImageList1.ColorDepth:=cd32bit;

  buf:=TBitmap.Create;
  buf.LoadFromFile('e13f6924a9da.bmp');
  tmp:=TBitmap.Create;
  tmp.Width:=24;
  tmp.Height:=24;
  tmp.PixelFormat:=pf32bit;

  for i:=0 to 11 do begin
    tmp.Canvas.CopyRect(Rect(0, 0, 24, 24), buf.Canvas,
      Rect(i*24, 0, (i+1)*24, 24));
    ImageList1.Add(tmp, nil);
  end;

  tmp.Free;
  buf.Free;
  ToolBar1.Images:=ImageList1;
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 11.09.2009, 14:20   #19
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Коллеги, еще как вариант можно использовать набор AlphaSkins (стоп! я не говорю,что нужно включать скинирование формы!).
Просто там в наборе есть TsAlphaImageList с помощью которого PNG, например, прекрасно отображается хоть где - и в Image и в SpeedButton и во всем остальном.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 11.09.2009, 14:59   #20
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Из пушки по воробьям. pngimage - маленький и быстрый
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
uTorrent 1.8.1 Haxxproxx Софт 0 27.07.2009 23:25
Программе некорректно обрабатывает некоторые файлы Shturmer Помощь студентам 8 09.07.2009 20:34
uTorrent - взаимодействие SoulReaver Win Api 1 21.06.2009 20:06
Как нарисовать картинку сбоку в меню как в Punto Switcher Crazyman Win Api 4 26.09.2008 18:13
обновление в блоге - Programmersforum.ru toolbar – тулбар для нашего клуба Pblog Обсуждение статей 0 13.12.2007 20:20