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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 21:17   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Как объединить 2 Image и сохранить как одну картинку?

Добрый вечер! Сабж! Есть Image1 и Image2. Image2 наложен на поверхность Image1. Нужно их объединить и сохранить Image1 в файл, но чтобы та картинка, которая загружена в Image2 и лежащая на Image1 тоже сохранилась с Image1. Как бы объединить картинки. Как это можно сделать вообще?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.05.2012, 21:32   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

А вторая картинка, которая поверх первой, имеет прозрачность? Просто должен же быть алгоритм наложения. Если да, то создаете TBitmap с размерами картинки и глубиной цвета 24 бит, сначала копируете в него первую картинку (Canvas.Draw), а потом по маске (цвету, который прозрачный) избирательно рисуете пиксели из 2й картинки поверх скопированной.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 13.05.2012, 21:40   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
А вторая картинка, которая поверх первой, имеет прозрачность?
Да, прозрачность установлена
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.05.2012, 21:45   #4
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

по моему вот так.
Код:
  Image2.Picture.Bitmap.Canvas.StretchDraw(Image2.Picture.Bitmap.Canvas.ClipRect, Image2.Picture.Bitmap);
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 13.05.2012, 21:57   #5
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Из своего старого кода:
Код:
sav_map.Canvas.Draw(0,0,img_water.Picture.Bitmap);
for i:=1 to 568 do
for j:=1 to 493 do
if img_map.Canvas.Pixels[i,j]<>clred then sav_map.Canvas.Pixels[i,j]:=img_map.Canvas.Pixels[i,j];
P.S. Можно ускорить, используя массив байтов Scanline вместо Canvas.Pixels. Размерность массива Scanline втрое больше размерности Canvas.Pixels при глубине цвета 24 бит. Каждые 3 байта Scanline и есть цвет пикселя с составляющими в обратном порядке: bgr.

#6:
Цифры в циклах - размеры картинки имаджа. Подставляйте ваши и всех делов.
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 13.05.2012 в 22:01.
3D Hunter вне форума Ответить с цитированием
Старый 13.05.2012, 21:58   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

И что значат цифры в циклах?
Цитата:
по моему вот так
Неа, сохраняется Image1 только. Без Image2
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.05.2012, 22:14   #7
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Вот это уж должно работать.
Код:
var
...
  bmp: TBitmap;
....
  bmp := TBitmap.Create;
  bmp.Assign(Image1.Picture.Graphic);
  bmp.Canvas.Draw(0,0, Image2.Picture.Graphic);
  bmp.SaveToFile(<...>);
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 13.05.2012, 22:21   #8
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Не будет оно работать так, как нужно ТС
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 13.05.2012, 22:31   #9
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

всмыле транспарентколор?
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 13.05.2012, 22:33   #10
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

SNUPY:
Именно так. Получается, что вы сначала рисуете на битмапе одну картинку, а потом накладываете на нее вторую. Смысл сего? ТС, как я понял, нужно делать попиксельную проверку на прозрачность и решать, какие пиксели 2го изображения накладывать, а какие нет.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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