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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2009, 17:38   #1
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию Графический редактор

Всем привет.У меня есть вопрос пишу графический редактор для создания аваторок и есть вопрос я сделал готовые шаблоны которые должны накладыватся на фотографию как это сделать шаблоны в некоторых местах с прозрачностью тоеь Альфа канал там где он есть должно быть не видно фона шаблона а заменять его на фотографию.Дайте сылки по этому вопросу если можете код ну или что то еще.
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 25.11.2009, 17:58   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

можно:
image1.Transparent:=true;
Будет просвечивать цвет, заданный в Bitmap.


Или можно использовать DDS.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 25.11.2009, 18:11   #3
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

А как наложить картинку на картинку и поменять размер 1-й картинки за ответ спасибо ставлю +
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 25.11.2009, 18:20   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Код:
image1.Stretch:=true;
image1.Width:=somewidth;
image1.Height:=someheight;
А для наложения советую делать подобие слоев.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 25.11.2009, 18:28   #5
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Спасибо.У меня вопрос почему я не могу поставить тебе + пишет что я уже тебе ставил +.
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 25.11.2009, 18:47   #6
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Видно я был последним, кому ты плюс поставил
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 25.11.2009, 22:29   #7
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от russian-stalker Посмотреть сообщение
image1.Transparent:=true;
Будет просвечивать цвет, заданный в Bitmap.
А если не 100% прозрачность?

Последний раз редактировалось TwiX; 25.11.2009 в 22:31.
TwiX вне форума Ответить с цитированием
Старый 25.11.2009, 23:46   #8
SalasAndriy
Форумчанин Подтвердите свой е-майл
 
Аватар для SalasAndriy
 
Регистрация: 01.11.2007
Сообщений: 157
По умолчанию

Цитата:
А если не 100% прозрачность?
А если прозрачность не 100% то вот примерчик...

Код:
procedure Morphing(Bm1,Bm2: TBitmap; progress: Integer);
var dstPixel, srcPixel: PRGBQuad; Weight: Integer; I: Integer;
begin
 srcPixel := Bm2.ScanLine[Bm2.Height - 1];
 dstPixel := Bm1.ScanLine[Bm1.Height - 1];
 Weight := MulDiv(256, Progress, 255);
 for I := (Bm1.Width * Bm1.Height) - 1 downto 0 do begin
   with dstPixel^ do begin
     Inc(rgbRed, (Weight * (srcPixel^.rgbRed - rgbRed)) shr 8);
     Inc(rgbGreen, (Weight * (srcPixel^.rgbGreen - rgbGreen)) shr 8);
     Inc(rgbBlue, (Weight * (srcPixel^.rgbBlue - rgbBlue)) shr 8);
   end;
   Inc(srcPixel);
   Inc(dstPixel);
 end;
end;

// Пример использования
procedure TForm1.Button1Click(Sender: TObject);
var
BBB, LLL: TBitmap;
begin
  BBB:= TBitmap.Create;
  BBB.LoadFromFile('1.bmp');
  BBB.PixelFormat:=pf32bit;
  BBB.Canvas.Brush.Color:=clwhite;
  LLL:= TBitmap.Create;
  LLL.LoadFromFile('2.bmp');
  LLL.PixelFormat:=pf32bit;
  LLL.Canvas.Brush.Color:=clwhite;
  Morphing(BBB, LLL, TrackBar1.Position);

  BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,BBB.Canvas.Handle,0,0,SRCCOPY);

  BBB.Free;
  LLL.Free;
end;
и еще один:
Код:
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;
SalasAndriy вне форума Ответить с цитированием
Старый 26.11.2009, 00:43   #9
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Спасибо. Будем разбираться... =)
TwiX вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графический редактор mopmuk Помощь студентам 4 10.06.2009 16:44
Графический редактор oreke Общие вопросы C/C++ 1 16.10.2008 15:17
Графический редактор Alex_Bond Общие вопросы .NET 1 14.05.2008 08:55
Графический редактор UnD)eaD)Snake Софт 10 23.07.2007 07:34