[Çözüldü] Actionları kullanmadan fotoğraf çekme - CesuR - 05-01-2022
merhaba, telefondan resim çekmek için paylaşılan bütün örneklerde TakePhotoFromCameraAction kullanılmış. Bu actionı kullandığımızda ekrana kamera uygulamasının kendine has çekme tuşu ve çektikten sonra kaydet tuşu geliyor. Bunları aşmak için action yerine button nesnesinin onclick eventinda kamerayı aç kapa yaptırarak imgCameraView üzerine resmi alıyorum. Buradan da bir image nesnesine alıyorum.Fakat bunu bir türlü galeriye kaydedemiyorum. Windows üzerinde denediğimde belgelerime kayıt ediyor ama telefonda denediğimde hiç bir tepki yok.

Kod:
procedure TForm1.btnFalseClick(Sender: TObject);
begin
CameraComponent.Active := False;
Image1.Bitmap.Assign(imgCameraView.Bitmap);
self.imgCameraView.Bitmap.SaveToFile(System.IOUtils.TPath.GetPicturesPath + '/resimadi.jpg');
end;
procedure TForm1.btnTrueClick(Sender: TObject);
begin
CameraComponent.Active := True;
end;
procedure TForm1.CameraComponentSampleBufferReady(Sender: TObject;
const ATime: TMediaTime);
begin
CameraComponent.SampleBufferToBitmap(imgCameraView.Bitmap, True);
end;
Cvp: Actionları kullanmadan fotoğraf çekme - RAD Coder - 05-01-2022
Dosyayı aşağıdaki gibi kaydedin.
imgCameraView.Bitmap.SaveToFile(TPath.Combine(TPath.GetPicturesPath, 'resimadi.jpg'));
yada aşağıdaki dizine kaydedin.
imgCameraView.Bitmap.SaveToFile(TPath.Combine(TPath.GetSharedPicturesPath, 'resimadi.jpg'));
Önemli Not: Dosya sistemine erişim iznini de vermeniz gerekiyor.
Ayrıca;
Project > Options > Application > Entitlement List penceresinden de Secure file sharing özelliğini de etkinleştirin.
[attachment=1947]
Actionları kullanmadan fotoğraf çekme - CesuR - 05-01-2022
Teşekkürler üstadım ama malesef yine kaydetmedi..
Cvp: Actionları kullanmadan fotoğraf çekme - RAD Coder - 05-01-2022
(05-01-2022, Saat: 13:11)CesuR Adlı Kullanıcıdan Alıntı: Teşekkürler üstadım ama malesef yine kaydetmedi..
Sorunun kaynağını tespit etmek adına aşağıdaki adımları uygulayabilir misiniz?
Fotoğrafı imgCameraView bileşenine aktarıp aktarmadığını test etmek amacıyla;
Çalışma anında, Image ve imgCameraView bileşenlerinin size'ına bakabilir misiniz.
Her iki bileşende de sıfırdan büyük bir değer görmelisiniz.
Eğer öyle değilse, sorun tam da bu noktadadır.
Size sıfırdan büyükse o halde kaydetme yönteminde bir sorun var demektir.
Bu durumda, uygulama özelliklerinden dosya erişim izni ve galeriye erişim izni olup olmadığını kontrol edin.
Uygulama özelliklerinde izinler etkin ise kaydedilen dizinde bir soru var demektir.
Actionları kullanmadan fotoğraf çekme - mrmarman - 05-01-2022
Merhaba.
Kafa karışıklığı oluşmadan TEST için daha basit bir yöntem önereceğim.
Bir TEXT dosyayı fotoğraflar klasörüne kaydetmeyi ve telefondan da browse edip o text dosyanın oraya kaydedilip kaydedilmediğini anlamaya çalışın.
With TStringList.Create do
try
text := 'TEST';
savetofile(.....);
finally
free;
end;
Sonuçta fotoğraf klasörü sadece bir dosya klasörüdür fotoğraf olmazsa kayıt olmaz diye bir kaide yoktur.
Cvp: Actionları kullanmadan fotoğraf çekme - CesuR - 05-01-2022
Dediklerinizi denediğimde gördüm ki kayıt ettiği yeri aşağıdaki konummuş.
Bu bilgisayar\Galaxy S8\Phone\Android\data\com.embarcadero.kamera\files\Pictures
Kod:
imgCameraView.Bitmap.SaveToFile(TPath.Combine(TPath.GetPicturesPath, 'kimagecamera.jpg'));
Image1.Bitmap.SaveToFile(TPath.Combine(TPath.GetPicturesPath, 'kimage.jpg'));
Sorun verdiğim pathin yanlış yer olmasıymış. Aslında bunu RAD CODER arkadaşım verdiği cevapta doğru pathi göstermiş ama gözümden kaçmış Mrmarman üstadımın paylaşmış olduğu TPath ile alınan klasör yollar adlı cevabından doğru path ekledikten sonra düzeldi. İhtiyacı olanlar için aşağıya bırakıyorum.
Mrmarman ve Rad Codere çok teşekkürler.
Doğru path
Kod:
Image1.Bitmap.SaveToFile(TPath.Combine(System.IOUtils.TPath.GetSharedCameraPath, 'kimage.jpg'));
Mrmarmanın paylaşımı.
Kod:
System.IOUtils.TPath.GetRandomFileName =33um0af2.6HB
System.IOUtils.TPath.GetTempFileName =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/tmp/tmp.OvOnGl9931
System.IOUtils.TPath.GetTempPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/tmp
System.IOUtils.TPath.GetHomePath =/data/data/com.embarcadero.HeaderFooterApplication/files
System.IOUtils.TPath.GetDocumentsPath =/data/data/com.embarcadero.HeaderFooterApplication/files
System.IOUtils.TPath.GetSharedDocumentsPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files
System.IOUtils.TPath.GetLibraryPath =/data/app-lib/com.embarcadero.HeaderFooterApplication-1
System.IOUtils.TPath.GetCachePath =/data/data/com.embarcadero.HeaderFooterApplication/cache
System.IOUtils.TPath.GetPublicPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files
System.IOUtils.TPath.GetPicturesPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Pictures
System.IOUtils.TPath.GetSharedPicturesPath =/storage/emulated/0/Pictures
System.IOUtils.TPath.GetCameraPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/DCIM
System.IOUtils.TPath.GetSharedCameraPath =/storage/emulated/0/DCIM
System.IOUtils.TPath.GetMusicPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Music
System.IOUtils.TPath.GetSharedMusicPath =/storage/emulated/0/Music
System.IOUtils.TPath.GetMoviesPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Movies
System.IOUtils.TPath.GetSharedMoviesPath =/storage/emulated/0/Movies
System.IOUtils.TPath.GetAlarmsPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Alarms
System.IOUtils.TPath.GetSharedAlarmsPath =/storage/emulated/0/Alarms
System.IOUtils.TPath.GetDownloadsPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Download
System.IOUtils.TPath.GetSharedDownloadsPath =/storage/emulated/0/Download
System.IOUtils.TPath.GetRingtonesPath =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Ringtones
System.IOUtils.TPath.GetSharedRingtonesPath =/storage/emulated/0/Ringtones
Androidapi.IOUtils.GetExternalFilesDir =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files
Androidapi.IOUtils.GetFilesDir =/data/data/com.embarcadero.HeaderFooterApplication/files
Androidapi.IOUtils.GetLibraryPath =/data/app-lib/com.embarcadero.HeaderFooterApplication-1
Androidapi.IOUtils.GetCacheDir =/data/data/com.embarcadero.HeaderFooterApplication/cache
Androidapi.IOUtils.GetExternalCacheDir =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/cache
Androidapi.IOUtils.GetExternalCameraDir =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/DCIM
Androidapi.IOUtils.GetExternalDownloadsDir =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Download
Androidapi.IOUtils.GetExternalMoviesDir =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Movies
Androidapi.IOUtils.GetExternalMusicDir =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Music
Androidapi.IOUtils.GetExternalAlarmsDir =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Alarms
Androidapi.IOUtils.GetExternalRingtonesDir =/storage/emulated/0/Android/data/com.embarcadero.HeaderFooterApplication/files/Ringtones
Androidapi.IOUtils.GetSharedPicturesDir =/storage/emulated/0/Pictures
Androidapi.IOUtils.GetSharedCameraDir =/storage/emulated/0/DCIM
Androidapi.IOUtils.GetSharedDownloadsDir =/storage/emulated/0/Download
Androidapi.IOUtils.GetSharedMoviesDir =/storage/emulated/0/Movies
Androidapi.IOUtils.GetSharedMusicDir =/storage/emulated/0/Music
Androidapi.IOUtils.GetSharedAlarmsDir =/storage/emulated/0/Alarms
Androidapi.IOUtils.GetSharedRingtonesDir =/storage/emulated/0/Ringtones
|