Перейти к содержанию
Fire Monkey от А до Я
  • 0

Наклеить одно изображение на другое


Rusland

Вопрос

Есть две картинки в формате png. Как на одну картинку наложить вторую, которая с прозрачностью (фактически там только рамка) и вывести в Image?

Изменено пользователем Rusland
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
17 минут назад, Rusland сказал:

Есть две картинки в формате png. Как на одну картинку наложить вторую, которая с прозрачностью (фактически там только рамка) и вывести в Image?

приложи картинки

Ссылка на комментарий
  • 0

Хотелось бы получить что-то вроде (легко делается с помощью Photoshop/GIMP и т.п.):

cardblank2.png

а нужно делать программно

Изменено пользователем Rusland
Ссылка на комментарий
  • 0
1 час назад, krapotkin сказал:

ответ просто нарисовать по очереди не подошел?

Чей ответ? Как это сделать? Пока только ZuBy предложил использовать 2 Image. Но это не очень мне подходит.

Из найденного в интернете пока только для VCL (тут и тут ), а мне надо на FMX

 

Изменено пользователем Rusland
Ссылка на комментарий
  • 0

Безрезультатно убил полдня на поиски решения в интернете, пришлось разбираться самому:

var
  bmp: TBitmap;
  SrcRect, DstRect: TRectF;
begin
  bmp:=TBitmap.Create(200,260);
  bmp.Canvas.BeginScene();
  try
    SrcRect := TRectF.Create(0, 0, 200, 260);
    DstRect := TRectF.Create(0, 0, 200, 260);
    bmp.Canvas.DrawBitmap( Image1.Bitmap, SrcRect, DstRect, 1, false);
    bmp.Canvas.DrawBitmap( Image2.Bitmap, SrcRect, DstRect, 1, false);
  finally
    bmp.Canvas.EndScene();
  end;
  Image3.Bitmap.Assign(bmp);

"А ларчик просто открывался" 

 

PS. Осталось научится, как некоторые точки самому делать прозрачными

Ссылка на комментарий
  • 0
5 часов назад, Rusland сказал:

PS. Осталось научится, как некоторые точки самому делать прозрачными

Как ты ищешь? )

Вот решение люди предлагают.

 

Ссылка на комментарий
  • 0

Тестировал вышеуказанный код c DrawBitmap на Windows и все отлично работает. Проверил на Android и, о ужас, на картинке в прозрачных местах возникают цветовые артефакты! Как исправить?

 

Ссылка на комментарий
  • 0

Вот проект Png2Png.zip - в Windows работает нормально.

В Android нажимаю кнопку - в первый раз бывает что два битмапа склеиваются нормально. Но чаще вижу артефакты:

Screenshot_2016-10-10-16-11-07.png

А если свернуть и развернуть приложение, то вот:

Screenshot_2016-10-10-16-11-30.png

 

Подскажите, что я делаю не правильно?

 

 

Ссылка на комментарий
  • 1
  • Модераторы
var
  bmp: TBitmap;
  SrcRect, DstRect, SrcRect2, DstRect2: TRectF;
begin
  bmp := TBitmap.Create(256, 256);
  bmp.Canvas.BeginScene();
  try
    SrcRect := TRectF.Create(0, 0, 256, 256);
    DstRect := TRectF.Create(20, 20, 236, 236);
    SrcRect2 := TRectF.Create(0, 0, 256, 256);
    DstRect2 := TRectF.Create(0, 0, 256, 256);
    bmp.Clear(TAlphaColorRec.Null);
    bmp.Canvas.DrawBitmap(Image1.Bitmap, SrcRect2, DstRect2, 0.8, false);
    bmp.Canvas.DrawBitmap(Image2.Bitmap, SrcRect, DstRect, 0.8, false);
  finally
    bmp.Canvas.EndScene();
    Image3.Bitmap.SetSize(256, 256);
    Image3.Bitmap.CopyFromBitmap(bmp);
    bmp.Free;
  end;
end;

 

Ссылка на комментарий
  • 0

Если очень хочется работать попиксельно - то можно попиксельно свести два битмапа, вызывая getPixel одного и setPixel другого.

http://docwiki.embarcadero.com/Libraries/Tokyo/en/FMX.Graphics.TBitmapData

Изменено пользователем sulion
Ссылка на комментарий
  • 0

Про 

bmp.Clear(TAlphaColorRec.Null)

надо не забывать. В Windows новая картинка создается уже заполненной нулями, хотя гарантий нет, а вот на других платформах — память содержит мусор, хотя гарантий тоже нет, поэтому вполне может работать на одном дэвайсе нормально, а на другом выдавать мусор.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...