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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 22:44   #11
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Ну... в самом Имеже нет транспарент колора... а так несколько вариантов решения сея проблемы:
1. Создать маску и провести два последовательных bitblt и ключами SRCPAINT и SRCAND
2. Создать маску и maskblt
3. TransparentBlt
4.
Код:
var
...
  bmp, bmp2: TBitmap;
....
  bmp := TBitmap.Create;
  bmp2 := TBitmap.Create;
  bmp.Assign(Image1.Picture.Graphic);
  bmp2.Assign(Image2.Picture.Graphic);
  bmp2.Mask(clRed); // bmp2.TransparentColor :=clRed;
                           // bmp2.Transparent := true;
  bmp.Canvas.Draw(0,0, Image2.Picture.Graphic);
  bmp.SaveToFile(<...>);
короче общими словами... TCanvas.Draw понимает маску ^__^
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 13.05.2012 в 22:47.
SNUPY вне форума Ответить с цитированием
Старый 13.05.2012, 22:58   #12
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Не знал о свойстве Mask. Спасибо, познавательно
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.05.2012, 06:22   #13
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Получилось . Огромное спасибо за помощь .
-----
Только один нюанс. Картинка в bmp1 не сохраняет цвет и становится какой-то монохромной чтоли:
Код:
procedure TForm13.btn1Click(Sender: TObject);
var
 bmp1, bmp2: TBitmap;
begin
 bmp1:=TBitmap.Create;
 bmp2:=TBitmap.Create;
 bmp1.Assign(Form13.img1.Picture.Graphic);
 bmp2.Assign(Form13.img2.Picture.Graphic);
 bmp2.Mask(clRed);
 bmp2.TransparentColor:=clRed;
 bmp2.Transparent:=True;
 bmp2.Canvas.Draw(10,10,Form13.img1.Picture.Graphic);
 bmp2.SaveToFile('G:\2.bmp');
end;
Это можно подправить как-то?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 14.05.2012 в 06:36.
artemavd вне форума Ответить с цитированием
Старый 14.05.2012, 09:28   #14
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Просто вы не форсировали глубину цвета при создании битмапа:
Код:
bmp2:=TBitmap.Create;
bmp2.PixelFormat:=pf24bit;
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.05.2012, 10:14   #15
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Супе, 3D Hunter! Сейчас получилось. Спасибо тебе огромное
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 14.05.2012, 10:32   #16
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Часто рад помочь
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.05.2012, 11:11   #17
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А если я добавлю третий bmp3?
То надо будет аналогично написать?
Код:
procedure TForm13.btn1Click(Sender: TObject);
var
 bmp1, bmp2, bmp3: TBitmap;
begin
 bmp1:=TBitmap.Create;
 bmp2:=TBitmap.Create;
 bmp3:=TBitmap.Create;
 bmp2.PixelFormat:=pf24bit;

 bmp1.Assign(Form13.img3.Picture.Graphic);
 bmp2.Assign(Form13.img2.Picture.Graphic);
 bmp3.Assign(Form13.img1.Picture.Graphic);

 bmp1.Mask(clRed);
 bmp1.TransparentColor:=clRed;
 bmp1.Transparent:=True;

 bmp3.Mask(clRed);
 bmp3.TransparentColor:=clRed;
 bmp3.Transparent:=True;

 bmp2.Canvas.Draw(15,15,Form13.img3.Picture.Graphic);
 bmp2.Canvas.Draw(25,25,Form13.img1.Picture.Graphic);
 bmp2.SaveToFile('G:\ololo.bmp');
end;
но тогда картинка в bmp3 теряет цвет
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 14.05.2012, 11:17   #18
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Вообще лучше всегда явно указывать глубину цвета. Можно сразу после конструктора битмапа, как в примере.
Не совсем понял, что значит "теряет цвет", но лучше прописать глубину цвета, как для bmp2.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 14.05.2012, 11:20   #19
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Сделал так:
Код:
procedure TForm13.btn1Click(Sender: TObject);
var
 bmp1, bmp2, bmp3: TBitmap;
begin
 bmp1:=TBitmap.Create;
 bmp2:=TBitmap.Create;
 bmp3:=TBitmap.Create;
 bmp2.PixelFormat:=pf24bit;

 bmp1.Assign(Form13.img3.Picture.Graphic);
 bmp2.Assign(Form13.img2.Picture.Graphic);
 bmp3.Assign(Form13.img1.Picture.Graphic);

 bmp1.Mask(clRed);
 bmp1.TransparentColor:=clRed;
 bmp1.Transparent:=True;

 bmp2.Canvas.Draw(15,15,Form13.img3.Picture.Graphic);
 bmp2.Canvas.Draw(45,15,Form13.img1.Picture.Graphic);
 bmp2.SaveToFile('G:\ololo.bmp');
end;
Вроде получилось
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить картинку в одну ячейку Liderx Microsoft Office Excel 2 15.02.2016 18:53
Как сохранить картинку losbl9 Работа с сетью в Delphi 0 18.01.2012 11:01
Как объединить значения дублей в одну ячейку azzaro Microsoft Office Excel 9 22.01.2011 14:45
Как сохранить Image и другие компоненты находящиеся на нем как рисунок Paul Hindenburg Мультимедиа в Delphi 2 30.12.2010 09:53
Как соединить картинки в одну картинку! AquaKlaster Общие вопросы Delphi 7 26.04.2010 07:57