ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Водяные знаки. Delphi
  #1  
Старый 16.04.2010, 19:38
SultanOFF
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме:
840493

Репутация: 0
По умолчанию Водяные знаки. Delphi

Здравствуйте. Появтлась необходимость накладывать в своей проге водяной знак на картинку(JPG). Водяной знак также представляет из себя обычную картинку. Собственно исходник по наложению картинки на картинку Я нашел. Но там 1-ая картинка полностью накладывается на вторую(ну только с прозрачностью), а Мне нужно на определенный участок первой картинки. Вот код
Код:
var    
  bmp1, bmp2: TBitMap;    
  Blend: TBlendFunction;    
begin    
  bmp1 := TBitMap.Create;    
  bmp2 := TBitMap.Create;    
  bmp1.LoadFromFile('C:\1.bmp'); // загружаем 1 битмап    
  bmp2.LoadFromFile('C:\2.bmp'); // и второй битмап    
  bmp1.PixelFormat := pf32bit; // переводим оба в 32 бит    
  bmp2.PixelFormat := pf32bit;    
  Blend.BlendOp := AC_SRC_OVER;
  Blend.BlendFlags := 0;    
  Blend.SourceConstantAlpha := 128; // прозрачность 50% (0 - 255)    
  Blend.AlphaFormat := AC_SRC_ALPHA; // либо = 0 (другой алгоритм)
  // накладываем битмап 2 на битмап 1. Результат в bmp1
  if Windows.AlphaBlend(bmp1.Canvas.Handle, 0, 0, bmp1.Width, bmp1.Height,    
                        bmp2.Canvas.Handle, 0, 0, bmp2.Width, bmp2.Height, Blend) then    
    Canvas.Draw(0, 0, bmp1) // рисуем результат на форме    
  else ShowMessage(IntToStr(GetLastError)); // или код ошибки, если наложить не удалось    
  bmp1.Free; bmp2.Free; // уничтожаем битмапы    
end;
Помогите пожалуйста
 
Ответить с цитированием

  #2  
Старый 16.04.2010, 19:49
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

спрашивается: млять ты каким местом смотришь????????????????????????????????
тебе случайно ничего не говорят эти цифры:
if Windows.AlphaBlend(bmp1.Canvas.Handle, 0, 0, bmp1.Width, bmp1.Height, bmp2.Canvas.Handle, 0, 0, bmp2.Width, bmp2.Height, Blend) then

Или впадлу глянуть в MSDN и увидеть
Цитата:
BOOL AlphaBlend(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of upper-left corner
int nYOriginDest, // y-coord of upper-left corner
int nWidthDest, // destination width
int nHeightDest, // destination height
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of upper-left corner
int nYOriginSrc, // y-coord of upper-left corner
int nWidthSrc, // source width
int nHeightSrc, // source height
BLENDFUNCTION blendFunction // alpha-blending function
);
Когда задаете подобные вопросы, вы хотябы ищите сначало ответы в инете или хоть чуть сами подумайте над ответом. Тем более что на 99% вопросов по WinAPI - в MSDN есть ответы. Влом канать? Ну тогда юзайте онлайн версию. Не знаете англ языка, ну так смотрите уже переведенный вариант или кормите гуглопереводчика.

Последний раз редактировалось slesh; 16.04.2010 в 20:12..
 
Ответить с цитированием

  #3  
Старый 16.04.2010, 20:19
SultanOFF
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме:
840493

Репутация: 0
По умолчанию

Slesh, простите Меня за такие глупые вопросы действительно про MSDN Я впервые узнал.. впредь обещаю быть более внимательным.. Вот Я сделал так
Код:
Windows.AlphaBlend(bmp1.Canvas.Handle, bmp1.Width-bmp2.Width, bmp1.Height- bmp2.Height, bmp1.Width, bmp1.Height,
                        bmp2.Canvas.Handle, 0, 0, bmp2.Width,  bmp2.Height, Blend)
по Моим суждениям вторая картинка должна появится в правом нижнем углу. Однако картинки вообще не видно.
 
Ответить с цитированием

  #4  
Старый 16.04.2010, 20:27
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

А зачем понадобилось добавить водный знак? Опытному человеку не очень сложно будет обойти такую реализацию (скажем, сделать скриншот проги, на котором должен быть ватермарк, но его не будет).
 
Ответить с цитированием

  #5  
Старый 16.04.2010, 20:30
SultanOFF
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме:
840493

Репутация: 0
По умолчанию

Мне на скриншоты нужно накладывать водяной знак, этой прогой особо опытные люди не будут пользоваться
 
Ответить с цитированием

  #6  
Старый 16.04.2010, 20:44
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Код:
  if Windows.AlphaBlend(
    bmp1.Canvas.Handle, // главная картинка
    bmp1.Width - bmp2.Width, // место куда начнет выводиться вторая картинка по X
    bmp1.Height - bmp2.Height, // место куда начнет выводиться вторая картинка по Y
    bmp2.Width, // сколько будет выводиться вторая картинка по X
    bmp2.Height,  // сколько будет выводиться вторая картинка по Y
    bmp2.Canvas.Handle, // накладываемая картинка
    0, // откуда наложить X
    0, // откуда наложить Y
    bmp2.Width, // сколько наложить по X
    bmp2.Height, // сколько наложить по Y
    Blend) then
Выражаясь простым языком команда принимает значения:
Положение и размер региона куда впихиваются данные и положения и размер региона впихиваемых данных. Если первый меньше второго, то автоматически картинка уменьшится (масштаб станет меньше), если первый больше второго, то наоборот увеличится. т.е. чтото типа изменение размера еще можно тут реализовать.

AC_SRC_ALPHA - мешивание светов + прозрачность
AC_SRC_OVER - смешивание цветов без использование прозрачности

Последний раз редактировалось slesh; 16.04.2010 в 20:51..
 
Ответить с цитированием

  #7  
Старый 16.04.2010, 21:24
SultanOFF
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме:
840493

Репутация: 0
По умолчанию

все, спасибо большое Slesh. Теперь постараюсь меньше задавать подобные вопросы.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi - язык или среда? Seravin Болталка 12 28.03.2010 01:46
Литература Delphi Sams С/С++, C#, Delphi, .NET, Asm 2 19.03.2010 19:46
Books PSalm69 Избранное 248 27.10.2009 04:52
Virus.Win32.Induc.a или "Снова записки новичка" _=(mac)=_ Защита ОС: вирусы, антивирусы, файрволы. 5 24.08.2009 23:34



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ