Resim Üzerine Yazı Ekleme

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
jakarta2
Üye
Mesajlar: 69
Kayıt: 20 Nis 2015 05:51
İletişim:

Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 » 12 May 2016 06:15

Selam;

Sayfalarda ve internette aradım ama bulamadım. Mobile uygulamalarda resim üzerinde kullanabileceğimiz bir sürü efekt var parlaklığını v.s. ayarlayabiliyoruz ancak resim üzerine nasıl yazı ekleyip kaydedebiliriz?

Saygılarımla;

Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 589
Kayıt: 20 Eki 2006 10:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan » 12 May 2016 08:00

Merhaba;
Canvas yapısını kullanarak Image üzerine yazı yazabilirsiniz. Canvas'ı bir tual gibi düşünün. Üzerine başka bir resim çizebilirsiniz, şekilde çizebilirsiniz veya yazı yazabilirsiniz.
Çizim işlemlerinden önce Canvas.BeginScene, çizimden sonra Canvas.EndScene direktiflerini mutlaka kullanın.
Yazı yazmak için de
Image.Bitmap.Canvas.FillText metodunu kullanın.

Kaydetmek için ise bitmap'ın SaveToFile metodunu kullanabilirsiniz.
İyi çalışmalar...

Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 589
Kayıt: 20 Eki 2006 10:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan » 13 May 2016 08:55

Merhaba;
Örnek bir proje üzerinde çalışarak, Tüm Platformlar için (Android, iOS, Win ve Mac OS X) "Fotoğraf Üzerine Yazı Yazma ve Kaydetme" uygulamasının linkini formun paket programlar bölümünde paylaştım.
viewtopic.php?f=12&t=35773
Hayırlı olması dileğiyle..

jakarta2
Üye
Mesajlar: 69
Kayıt: 20 Nis 2015 05:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 » 13 May 2016 01:53

Fesih Bey;

Gerçekten delphi konusunda çok uzmansınız. Sizin gibi işinin ehli kişileri bulmak Türkiyede çok zor. Bu nedenle öncelikle tebrik ediyorum ve yardımlarınız için çok çok teşekkür ediyorum.

Saygılarımla;

Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 589
Kayıt: 20 Eki 2006 10:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan » 13 May 2016 02:22

jakarta2 yazdı:Fesih Bey;

Gerçekten delphi konusunda çok uzmansınız. Sizin gibi işinin ehli kişileri bulmak Türkiyede çok zor. Bu nedenle öncelikle tebrik ediyorum ve yardımlarınız için çok çok teşekkür ediyorum.

Saygılarımla;
Rica ederim. Faydalı olabildiysem ne mutlu bana.
İyi çalışmalar...

jakarta2
Üye
Mesajlar: 69
Kayıt: 20 Nis 2015 05:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 » 14 May 2016 02:55

Tekrar Merhaba;

Image1.Bitmap.Canvas.CopyRect(Rect(30,30, Image1.Width, Image1.Height), Image2.Canvas, Rect(0, 0, Image2.Picture.Width, Image2.Picture.Height));

komutunda copyrect undeclared hatası veriyor android için bu komutu nerede ve nasıl tanıtacağım?

Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 589
Kayıt: 20 Eki 2006 10:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan » 14 May 2016 09:48

Merhaba;
FMX uygulamalarda (Çoklu platform projelerinde), VCL uygulamalardaki CopyRect yerine Bitmap Canvas'ın DrawBitmap metodu kullanılır.
Ayrıca herhangi grafiksel bir nesnenin (Circle, Rectangle, Layout vb.) MakeScreenshot metodunu da kullanabilirsiniz. Örneğin;

Kod: Tümünü seç

 Rectangle1.MakeScreenshot;
MakeScreenshot, üzerinde bulunduğu alanın ekran görüntüsünü alır.

jakarta2
Üye
Mesajlar: 69
Kayıt: 20 Nis 2015 05:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 » 18 May 2016 02:07

Selam;

Aşağıdaki button2click ile birinci resmin istediğim yerine ikinci resmi yapıştırıp kaydedebiliyorum. Ancak ikinci resmin boyutlarını değiştirdiğimde boyutlarını değiştirdiğim ikinci resim simsiyah oluyor. Bu problemi nasıl aşabilirim? Bir de kullanıcıya hangi komutla ya da bileşenle resim seçtirebilirim?

Saygılarımla;

procedure TForm1.Button1Click(Sender: TObject);
begin
With Image1.Bitmap.Canvas do
begin
BeginScene;
Font.Size := 50;
Font.Family := 'Brush Script Std';
Fill.Color := TAlphaColors.Khaki;
Font.Style := [TFontStyle.fsbold];
FillText(TRectF.Create(120, 13, 400, 200), edit1.Text, True, 1, [TFillTextFlag.ftRightToLeft], TTextAlign.taLeading, TTextAlign.taLeading);
EndScene;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
MyBitmap: Tjpeg;
MyRect, myrect1: TRectF;
begin
// Image1.Bitmap.LoadFromFile(TPath.GetSharedCameraPath + PathDelim + 'YeniFoto.jpg');
MyBitmap := TBitmap.CreateFromFile(TPath.GetSharedCameraPath + PathDelim + 'YeniFoto.jpg');
mybitmap.Width := 281;
mybitmap.Height := 280;
MyRect := TRectF.Create(0, 50, 600, 400); //Eklenen resmin soldan ve üstten ne kadarının alındığı
MyRect1 := TRectF.Create(0, 100, 600, 400);//Birinci resmin soldan ve üstten neresinden başlayacağı
Image1.Bitmap.Canvas.BeginScene;
Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect1, 20);
Image1.Bitmap.Canvas.EndScene;// With Image1.Bitmap.Canvas do
mybitmap.SaveToFile(TPath.GetSharedCameraPath + PathDelim + 'deneme.jpg');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Image1.Bitmap.SaveToFile(TPath.GetSharedCameraPath + PathDelim + 'YeniFoto1.jpg');
end;

Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 589
Kayıt: 20 Eki 2006 10:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan » 18 May 2016 04:19

Merhaba;
Anladığım kadarıyla resmin bir bölümü alınacak.
Ekran görüntüsü:
Resim

Kod kısmı:

Kod: Tümünü seç

procedure TForm1.Button4Click(Sender: TObject);
var
  MyBitmap: TBitmap;
  MyRect, myrect1: TRectF;
begin
  MyBitmap := TBitmap.Create(281, 280);
  try
    MyRect := TRectF.Create(0, 50, 600, 400);
    myrect1 := TRectF.Create(0, 100, 600, 400);
    MyBitmap.Canvas.BeginScene;
    MyBitmap.Canvas.DrawBitmap(Image1.Bitmap, MyRect, myrect1, 0.20);
    MyBitmap.Canvas.EndScene;
    MyBitmap.SaveToFile(GetCurrentDir + PathDelim + 'YeniFoto2.Png');
  finally
    MyBitmap.Free;
  end;
end;
İyi çalışmalar

jakarta2
Üye
Mesajlar: 69
Kayıt: 20 Nis 2015 05:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 » 18 May 2016 11:50

Yapmak istediğim resmin bir bölümünü almaktan çok;
2 tane Timage düşünün 1. resim sabit 509*720 boyutlarında, üstünde ve altında şerit var. Ortası boş. Boş olan bölüm 280*280 ebatlarında ve Timage2 için bir resim seçilecek ve tam o alanı kaplayacak Seçilen resim küçükse genişletecek, büyükse küçültecek. Yani Auto size := True olacak diyebiliriz.

Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 589
Kayıt: 20 Eki 2006 10:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan » 19 May 2016 09:22

Yukarıda yaptığım örnek ve bir önceki örnekte kullanmadığım tekniklerle yapabilirsiniz. Sabit resmin canvas'ına 2. seçilen resimi yeniden boyutlandırarak çizmelisiniz.
jakarta2 yazdı:
Bir de kullanıcıya hangi komutla ya da bileşenle resim seçtirebilirim?
Maalesef VCL kütüphanesinde yer alan OpenDialog veya OpenPictureDialog nesneleri FMX kütüphanesinde yok. Dikkat ederseniz Android ve iOS platformlarında geliştirilen yazılımlarda yazılım sahipleri farklı farklı teknikler kullanmışlar. Sizde dosya ve klasör arama ve listeleme methodları ile yapabilirsiniz.
Daha önce paket programlar bölümünde örnek bir uygulama yaparak paylaşım.
İyi çalışmalar

jakarta2
Üye
Mesajlar: 69
Kayıt: 20 Nis 2015 05:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 » 20 May 2016 01:38

Kullanıcıya resim seçtirme olayını actionlist'teki --> standart action----->Media Library---->TakePhotoFromLibraryAction1 bileşenini kullanarak hallettim. Çok basitmiş :-)

Ancak diğer konu sıkıntılı. Birinci resmin canvasını kullanarak ikinci resmi seçtirip yapıştırıyorum hiçbir sıkıntı olmuyor ancak, ikinci resmin boyutlarında minicik bir oynama yapsam bile ikinci resim bozuluyor. MarginWrapMode özelliği var , resmi streech, fit, orijinal olarak düzenlemesi gerek ama Rect değerleri nedeniyle sanırım işe yaramıyor.
Bir instagram düzenlemesi kodu buldum. Onunla deneyeceğim.

Çok teşekkür ederim.
Saygılarımla;

Cevapla