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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2010, 15:44   #1
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
Восклицание Водяной знак (Delphi 7)

Пытаюсь сделать наложение водяного знака на изображение.
Не получается сделать так, чтобы невидимые участки накладываемого PNG полностью не отображались.

Делаю так:
Код:
Transparent := 80;

  // Получаем фон
  pic := TPicture.Create;
  pic.LoadFromFile(Edit1.Text);
  picHeight := pic.Graphic.Height;
  picWidth := pic.Graphic.Width;

  bitmapBackground := TBitmap.Create;
  bitmapBackground.Height := picHeight;
  bitmapBackground.Width := picWidth;
  bitmapBackground.Canvas.Draw(0,0,pic.Graphic);
  bitmapBackground.PixelFormat := pf32bit;

  // Получаем водяной знак
  pic.LoadFromFile(Edit2.Text);
  picHeight := pic.Graphic.Height;
  picWidth := pic.Graphic.Width;

  bitmapWatermark := TBitmap.Create;
  bitmapWatermark.Height := picHeight;
  bitmapWatermark.Width := picWidth;
  bitmapWatermark.Canvas.Draw(0,0,pic.Graphic);
  bitmapWatermark.Transparent := True;
  bitmapWatermark.TransparentColor := bitmapWatermark.Canvas.Pixels[1,1];
  bitmapWatermark.PixelFormat := pf32bit;

  Blend.BlendOp := AC_SRC_OVER;
  Blend.BlendFlags := 0;
  Blend.SourceConstantAlpha := round(255/100*Transparent);
  Blend.AlphaFormat := AC_SRC_OVER;

  Windows.AlphaBlend(bitmapBackground.Canvas.Handle, 0, 0, picWidth, picHeight,
                     bitmapWatermark.Canvas.Handle, 0,0, picWidth, picHeight, Blend);


Подскажите, как такое реализовать?

Р.S. Используется компонент PNGImage
Вложения
Тип файла: zip Transparent.zip (834.4 Кб, 46 просмотров)
alxd вне форума Ответить с цитированием
Старый 01.09.2010, 16:21   #2
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

эээ... по-моему Canvas.Draw(0,0,пнгимэйдж,прозрачно сть); работают отлично? лично у меня так...
Nater вне форума Ответить с цитированием
Старый 01.09.2010, 16:24   #3
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Nater Посмотреть сообщение
эээ... по-моему Canvas.Draw(0,0,пнгимэйдж,прозрачно сть); работают отлично? лично у меня так...
Так у Draw всего три параметра
Код:
procedure Draw(X, Y: Integer; Graphic: TGraphic);
alxd вне форума Ответить с цитированием
Старый 01.09.2010, 16:26   #4
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

есть и 4:

Код:
procedure Draw(X, Y: Integer; Graphic: TGraphic; Opacity: Byte);
Nater вне форума Ответить с цитированием
Старый 01.09.2010, 16:39   #5
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Delphi какой версии?
alxd вне форума Ответить с цитированием
Старый 01.09.2010, 16:47   #6
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

Я использую Rad Studio 2010.
Nater вне форума Ответить с цитированием
Старый 01.09.2010, 16:57   #7
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Nater Посмотреть сообщение
Я использую Rad Studio 2010.
В том то и дело, что 4 параметра есть только в 2010, а в Delphi 7 их 3
alxd вне форума Ответить с цитированием
Старый 01.09.2010, 21:07   #8
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

Переходите тогда на Rad Studio 2010, уже давно Windows 7 вышла а вы все за Delphi 7 сидите. Нельзя так )
Nater вне форума Ответить с цитированием
Старый 01.09.2010, 21:54   #9
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Nater Посмотреть сообщение
Нельзя так )
Windows 7, Delphi 7 - все правильно )))
alxd вне форума Ответить с цитированием
Старый 02.09.2010, 09:43   #10
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Поставил RAD Studio 2010, сделал через
Код:
procedure Draw(X, Y: Integer; Graphic: TGraphic; Opacity: Byte);
результат ровным счетом такой же. Может есть пример у кого?
alxd вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Знак ^ в delphi aruy Помощь студентам 15 14.08.2009 08:31
Есть чат на яваскрипте.не могу поставит знак +;Хотя люди его как то ставят, просто мой знак + заменяется maksim1983 JavaScript, Ajax 4 23.02.2009 07:55
Знак не равенства. IVANSour Общие вопросы Delphi 1 20.01.2009 06:53
Как сделать водяной насос? JoanM Свободное общение 5 18.08.2007 00:29