• 0
Rusland

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

Вопрос

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

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

11 ответов на этот вопрос

  • 0
17 минут назад, Rusland сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вот вторая cardblank.png

А первая может быть любая

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

cardblank2.png

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

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 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. Осталось научится, как некоторые точки самому делать прозрачными

AlexG понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
5 часов назад, Rusland сказал:

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

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

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

 

Rusland понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 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;

 

Rusland, enatechno и AlexG понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Отлично! Артефакты пропали. Если свернуть/развернуть приложение, ничего не исчезает :D

Равиль Зарипов (ZuBy) понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: ODmitrijS
      Подскажите алгоритм или готовый пример заливки замкнутой области рисунка произвольной формы определенным цветом?
      Моё решение часто приводит к переполнению стека.
    • Автор: virus_forever
      Доброго времени суток!
      Подскажите, пожалуйста, как можно отрисовать Bitmap (схематично на рисунке представлен черным прямоугольником) с поворотом последнего на определенный угол (скажем 45, 90, или любой другой) относительно какой либо точки - например центра TBitMap`a. И потом определить координаты углов - A, B, C и D для дальнейшего использования.

      Я вычитал, что для этого используется TMatrix с ее методами и SetMatrix у Canvas. Но в матрицах можно сказать ничего не понимаю, и нету хорошего описания - что это и с чем это употребляют.
      Подскажите, пожалуйста! Заранее спасибо!
    • Автор: Равиль Зарипов (ZuBy)
      Привет Всем!
      Как принято в современных приложениях, догружать контент(обычно это картинки) при скролинге.
      я взял картинки пользователей этого форума

      Seattle LVdynamicLoadBitmap.zip
      Berlin LVdynamicLoadBitmap(Berlin).zip
    • Автор: MikeWuzHere
      Есть задача написать дату на полученной только что фотографии с камеры. С камеры фотку получаю и выгружаю в TImage, далее нашел пару способов, а именно:
      image.bitmap.canvas.textout
      image.bitmap.canvas.filltext
      и оба у меня не работают, первый вариант не удается запустить, пишет, что нету такого свойства textout у TCanvas, а второй тупо вешает программу. Подскажите как можно решить эту проблему пожалуйста.
    • Автор: umkes
      Добрый день, возникла проблема при работе с TImage;
      У меня компонент TImage - imgRing и есть в TImageList. 
      Я динамически формирую Bitmap из копий картинки из TImageList и асайню его в TImage. На Windows все работает прекрасно, а на андроиде картинка все время пустая... Может кто-то подскажет, где я не прав
      //============================================================================== procedure TMainForm.DrawRing; //------------------------------------------------------------------------------ var bmp1, bmp2 : TBitmap; i : integer; str : TMemoryStream; begin bmp2 := TBitmap.Create; bmp2.Assign(ImageList.Source.Items[3].MultiResBitmap.Items[0].Bitmap); bmp1 := TBitmap.Create; bmp1.Assign(bmp2); bmp1.Width := ClientWidth + bmp2.Width * 10; i := 0; bmp1.Canvas.BeginScene(); while (i * bmp2.Width) < bmp1.Width do begin bmp1.Canvas.DrawBitmap(bmp2, RectF(0, 0, bmp2.Width, bmp2.Height), RectF(i * bmp2.Width, 0, (i + 1) * bmp2.Width, bmp2.Height), 1 ); inc(i); end{ while }; bmp1.Canvas.EndScene; str := TMemoryStream.Create; bmp1.SaveToStream(str); str.Position := 0; imgRing.BeginUpdate; imgRing.Bitmap.CreateFromStream(str); imgRing.EndUpdate; end{ procedure TMainForm.DrawRings }; Делаю такое потому-что TImage.WrapMode.Tile не подходит для моей задачи.
    • Автор: HoShiMin
      Загружаю в Bitmap значок 16х16, должно получиться что-то вроде такого:

      А получается так:

       
      Помогает только изменение размеров холста в фотошопе. В ХЕ8 всё работало как надо, в 10 - вот. Хотел отредактировать стиль, убрав Stretch у картинки, но у всплывающего меню нельзя отредактировать стиль. Как поправить, не меняя размеры самих картинок значков?
    • Автор: alewka006
      Подскажите, как на форме сделать фоновое изображение. Вставляю картинку (TImage) на весь экран, изображение в пропорции выводится не на весь экран
    • Автор: VirusZ2D
      Доброго времени суток подскажите как получить картинку из TStyleObject  
      var   Item:TListBoxItem;   StyleObject: TStyleObject; begin   Item  := ListBox1.ItemByIndex(0);   StyleObject := TStyleObject(Item.FindStyleResource('styleobjectstyle'));   if (StyleObject <> nil) and (StyleObject is TControl) then   begin     Image1.Bitmap:= StyleObject.Source;   // Выводит изображение указанное в SourceLookUp целиком;     Image1.Bitmap := // Интересует как вывести изображение обрезанное с учетом SourceLink   end;
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу