Resim Üzerine Yazı Ekleme

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

Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 »

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: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan »

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: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan »

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: 74
Kayıt: 20 Nis 2015 06:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 »

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: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan »

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: 74
Kayıt: 20 Nis 2015 06:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 »

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: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan »

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: 74
Kayıt: 20 Nis 2015 06:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 »

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: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan »

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: 74
Kayıt: 20 Nis 2015 06:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 »

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: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen fesiharslan »

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: 74
Kayıt: 20 Nis 2015 06:51
İletişim:

Re: Resim Üzerine Yazı Ekleme

Mesaj gönderen jakarta2 »

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