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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2010, 16:02   #1
zmey31313
Форумчанин
 
Регистрация: 19.11.2009
Сообщений: 155
Сообщение Можно ли в компоненте Image, настроить прозрачность изображения?

Можно ли в компоненте Image, настроить прозрачность изображения?
По всем вопросам связанным с Делфи или Паскаль обращайтесь, чем смогу тем и помогу.
Помог жми на весы!!!
dmi83206389@mail.ru
zmey31313 вне форума Ответить с цитированием
Старый 07.03.2010, 16:47   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А самому погуглить ?
Цитата:
Установка уровня прозрачности изображения
Автор: Федоровских Николай

Код:
procedure BlendBitmap(Src, Dest: TBitmap; Amount: Byte; Left, Top:
  Integer; BackColor: TColor; Transparent: Boolean);
  function CandC(C1, C2: TRGBTriple): Boolean;
  begin {Сравнение двух цветов}
    Result := (C1.rgbtBlue = C2.rgbtBlue) and
      (C1.rgbtGreen = C2.rgbtGreen) and
      (C1.rgbtRed = C2.rgbtRed);
  end;
  {Процедура установления уровня прозрачности
   изображения Dest, расположенного над изображением Src.
   Amount - уровень прозрачности в промежутке [0..255].
   Left, Top - левый верхний угол Dest.
   BackColor - цвет, который не нужно изменять,
   если Transparent = True.}
var
  x, y, y1, y2, x1, x2: Integer;
  ps, pd: pRGBTriple;
  rgb: TRGBTriple;
  A1, A2: Double;
begin
  Src.PixelFormat := pf24Bit;
  Dest.PixelFormat := pf24Bit;
  A1 := Amount / 255;
  A2 := 1 - A1;
  {Изменяется только та часть изображения,
   которая расположена над исходным}
  y1 := Max(0, Top);
  x1 := Max(0, Left);
  x2 := Min(Src.Width - 1, Left + Dest.Width - 1);
  y2 := Min(Src.Height - 1, Top + Dest.Height - 1);
  rgb.rgbtRed := Lo(BackColor);
  rgb.rgbtGreen := Lo(BackColor shr 8);
  rgb.rgbtBlue := Lo((BackColor shr 8)  shr 8);
  for y := y1 to y2 do
  begin
    ps := Src.ScanLine[y];
    pd := Dest.ScanLine[y - Top];
    Inc(ps, x1);
    if Left < 0 then
      Inc(pd, Abs(Left));
    for x := x1 to x2 do
    begin
      if not (Transparent and CandC(pd^, rgb)) then
        with pd^ do
        begin
          rgbtBlue := Round(A1 * ps^.rgbtBlue + A2 * rgbtBlue);
          rgbtGreen := Round(A1 * ps^.rgbtGreen + A2 * rgbtGreen);
          rgbtRed := Round(A1 * ps^.rgbtRed + A2 * rgbtRed);
        end;
      Inc(pd);
      Inc(ps);
    end;
  end;
end;

Пример использования:
var
  Bmp: TBitmap;
begin
  if not FileExists('C:\Blend.bmp') then
    Exit;
  Bmp := TBitmap.Create;
  try
    Bmp.LoadFromFile('C:\Blend.bmp');
    BlendBitmap(FBitmap, Bmp, 127, 10, 10, clWhite, True);
    Bmp.TransparentColor := clWhite;
    Bmp.Transparent := True;
    FBitmap.Canvas.Draw(10, 10, Bmp);
  finally
    Bmp.Free;
  end;
  Paint;
end;
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимированный Gif в компоненте Image Ermiss Мультимедиа в Delphi 17 12.09.2010 06:11
Сохранение изображения с Image brutos Мультимедиа в Delphi 7 19.05.2009 12:26
Прозрачность изображения DALLAS JavaScript, Ajax 1 08.01.2009 10:17
Создание координатной сетки на компоненте Image Thasraney Общие вопросы Delphi 5 03.06.2008 14:16
Прозрачность для нескольких цветов в Image SERG1980 Общие вопросы Delphi 3 11.05.2007 19:53