Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Çekilen resmi dosya yolunu alma?
#1
Merhaba arkadaşlar,

procedure Tresim.SpeedButton1Click(Sender: TObject);
var
  Service: IFMXCameraService;
  Params: TParamsPhotoQuery;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXCameraService,
    Service) then
  begin
    Params.Editable := True;
    // Specifies whether to save a picture to device Photo Library
    Params.NeedSaveToAlbum := True;
    Params.RequiredResolution := TSize.Create(1200, 1200);
    Params.OnDidFinishTaking := DoDidFinish;
    Service.TakePhoto(SpeedButton1, Params);
    edit1.Text:= ---------------------------------------------------------------------------Buraya çekilen resmin yolunu almaya çalışıyorum.
  end
  else
    ShowMessage('This device does not support the camera service');
end;

Yukarıda edit1.text nesnesine çektiğim resmin yolunu atamaya çalışıyorum \sdcard\0\DCIM\123456.jpg gibi
Tüm denemeler sonuçsuz kaldı? Yardımcı olabilecek varmı?
Cevapla
#2
(22-02-2018, Saat: 12:36)apachi2006 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba arkadaşlar,

procedure Tresim.SpeedButton1Click(Sender: TObject);
var
  Service: IFMXCameraService;
  Params: TParamsPhotoQuery;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXCameraService,
    Service) then
  begin
    Params.Editable := True;
    // Specifies whether to save a picture to device Photo Library
    Params.NeedSaveToAlbum := True;
    Params.RequiredResolution := TSize.Create(1200, 1200);
    Params.OnDidFinishTaking := DoDidFinish;
    Service.TakePhoto(SpeedButton1, Params);
    edit1.Text:= ---------------------------------------------------------------------------Buraya çekilen resmin yolunu almaya çalışıyorum.
  end
  else
    ShowMessage('This device does not support the camera service');
end;


Yukarıda edit1.text nesnesine çektiğim resmin yolunu atamaya çalışıyorum \sdcard\0\DCIM\123456.jpg gibi
Tüm denemeler sonuçsuz kaldı? Yardımcı olabilecek varmı?

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol sayfasında anlatmış.

formun private bölümüne aşağıdaki 2 methodu ekliyorsun.
private
  procedure DoDidFinish(Image: TBitmap);
  procedure DoMessageListener(const Sender: TObject; const M: TMessage);

implementation kısmında bu methodların kodlarını yazıyorsun.

Bir fotoğraf çekildiğinde veya galeriden br fotoğtaf seçildiğinde android bir mesaj yayınlar. Bizim bu mesajı yakalayabilmemiz için öncelikle mesaj dinleyiciye abone olmamız lazım.
procedure TForm1.FormCreate(Sender: TObject);
begin
  TMessageManager.DefaultManager.SubscribeToMessage(TMessageDidFinishTakingImageFromLibrary, DoMessageListener);
end;

procedure TForm1.DoDidFinish(Image: TBitmap);
begin
   Image1.Bitmap.Assign(Image);
end;

Şimdi de mesajı yakaladığımızda ne yapacağımızı yazalım:
procedure TForm1.DoMessageListener(const Sender: TObject; const M: TMessage);
begin
  if M is TMessageDidFinishTakingImageFromLibrary then
    Image1.Bitmap.Assign(TMessageDidFinishTakingImageFromLibrary(M).Value);
end;

Yukarıdaki işlemde fotoğrafı doğrudan bir TImage içerisine yüklüyor. Eğer dosya adını almak isteseydin kod aşağıdaki gibi olacaktı:
procedure TForm1.DoMessageListener(const Sender: TObject; const M: TMessage);
var
  ImagePath: string;
begin
  if M is TMessageReceivedImagePath then
  begin
    ImagePath := TMessageReceivedImagePath(M).Value;
    Edit1.Text := ImagePath;
    ...
  end;
end;


Not: Bu kodları hiç uygulamadım. İnternetten yaptığım araştırma sonucu edindim.
WWW
Cevapla
#3
Hemen deniyorum

procedure TForm1.DoMessageListener(const Sender: TObject; const M: TMessage);
var
 ImagePath: string;
begin
 if M is TMessageReceivedImagePath then
 begin
   ImagePath := TMessageReceivedImagePath(M).Value;
   Edit1.Text := ImagePath;
   ...
 end;
end;


Resim çekiyor, kırpma yapıyor, kaydediyor sıkıntı yok. Ama dosya yolunu edite aktarmıyor. Vaktiniz olursa deneyebilirmisiniz?
Cevapla
#4
(22-02-2018, Saat: 20:37)apachi2006 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHemen deniyorum

procedure TForm1.DoMessageListener(const Sender: TObject; const M: TMessage);
var
 ImagePath: string;
begin
 if M is TMessageReceivedImagePath then
 begin
   ImagePath := TMessageReceivedImagePath(M).Value;
   Edit1.Text := ImagePath;
   ...
 end;
end;


Resim çekiyor, kırpma yapıyor, kaydediyor sıkıntı yok. Ama dosya yolunu edite aktarmıyor. Vaktiniz olursa deneyebilirmisiniz?

Görünce aklıma geldi söyleyim dedim. Yeni bir değişken oluşturup o değişkene önce dosya yolunu(ImagePath Değişkenini) verip ardından edite bu yeni oluşturduğun değişkeni verirsen aktarma yapabilirmi acaba. Belki biraz saçma oldu ama öyle bi an aklıma geldi.
Cevapla
#5
(22-02-2018, Saat: 22:37)Cyb3r Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(22-02-2018, Saat: 20:37)apachi2006 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlHemen deniyorum

procedure TForm1.DoMessageListener(const Sender: TObject; const M: TMessage);
var
 ImagePath: string;
begin
 if M is TMessageReceivedImagePath then
 begin
   ImagePath := TMessageReceivedImagePath(M).Value;
   Edit1.Text := ImagePath;
   ...
 end;
end;


Resim çekiyor, kırpma yapıyor, kaydediyor sıkıntı yok. Ama dosya yolunu edite aktarmıyor. Vaktiniz olursa deneyebilirmisiniz?

Görünce aklıma geldi söyleyim dedim. Yeni bir değişken oluşturup o değişkene önce dosya yolunu(ImagePath Değişkenini) verip ardından edite bu yeni oluşturduğun değişkeni verirsen aktarma yapabilirmi acaba. Belki biraz saçma oldu ama öyle bi an aklıma geldi.



Smile) String değer aldığı için edit nesnesi değişkeni de string olarak tanımlayacağımızdan farketmez diye düşünüyorum.
Cevapla
#6
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol işimi gördü.

unit Unit30;
 
interface
 
uses
  System.IOUtils,
  System.SysUtils,
  System.Types,
  System.UITypes,
  System.Classes,
  System.Variants,
  System.Actions,
  System.Messaging,
 
  FMX.Platform,
  FMX.MediaLibrary,
  FMX.Consts,
  FMX.Surfaces,
  FMX.Types,
  FMX.Controls,
  FMX.Forms,
  FMX.Graphics,
  FMX.Dialogs,
  FMX.Controls.Presentation,
  FMX.StdCtrls,
  FMX.Layouts,
  FMX.Objects,
  FMX.ActnList,
  FMX.StdActns,
  FMX.MediaLibrary.Actions,
  FMX.Platform.Common,
  FMX.MediaLibrary.Android,
  FMX.Platform.Android,
  FMX.Helpers.Android,
  FMX.Memo,
 
  Androidapi.JNI.Embarcadero,
  Androidapi.Helpers,
  Androidapi.JNI.Provider,
  Androidapi.JNI.Net,
  Androidapi.JNI.Media,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNIBridge, FMX.ScrollBox;
 
type
  TForm30 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure HookImageMessage;
    procedure DidReceiveBitmap(const Sender: TObject; const M: TMessage);
    procedure TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
    procedure TakePhotoFromCameraAction1DidCancelTaking;
  end;
 
var
  Form30: TForm30;
 
implementation
 
{$R *.fmx}
 
procedure TForm30.Button1Click(Sender: TObject);
var
  Service: IFMXCameraService;
  Params: TParamsPhotoQuery;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXCameraService, Service) then
  begin
    Params.Editable := false;
    Params.NeedSaveToAlbum := true; /// Setting to FALSE 
    Params.RequiredResolution := TSize.create(9999, 9999);
    Params.OnDidFinishTaking := TakePhotoFromCameraAction1DidFinishTaking;
    Params.OnDidCancelTaking := TakePhotoFromCameraAction1DidCancelTaking;
    Service.TakePhoto(Button1, Params);
  end;
end;
 
procedure TForm30.FormCreate(Sender: TObject);
begin
  HookImageMessage;
end;
 
procedure TForm30.HookImageMessage;
begin
  // intercept the message to get the image path
  TMessageManager.DefaultManager.SubscribeToMessage(TMessageReceivedImagePath, DidReceiveBitmap);
end;
 
procedure TForm30.DidReceiveBitmap(const Sender: TObject; const M: TMessage);
 
  procedure DeleteImageFileCompletely(ImagePath: string);
  var
    AFile: TJavaObjectArray<JString>;
    DeleteFromThumbNails: string;
    ExternalContentUri: Jnet_Uri;
  begin
    Memo1.Lines.Clear;
    Memo1.Lines.Add('ImagePath = ' + ImagePath);
 
    if FileExists(ImagePath) then
    begin
      DeleteFile(ImagePath);
      AFile := TJavaObjectArray<JString>.create(1);
      AFile[0] := TJFile.JavaClass.init(StringToJString(ImagePath)).getCanonicalPath;
      DeleteFromThumbNails := JStringToString(TJImages_Thumbnails.JavaClass.DATA) + '=?';
      ExternalContentUri := TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI;
      TAndroidHelper.ContentResolver.delete(ExternalContentUri, StringToJString(DeleteFromThumbNails), AFile);
      Memo1.Lines.Add('DeleteFromThumbNails = ' + DeleteFromThumbNails);
      Memo1.Lines.Add('AFile = ' + JStringToString(AFile[0].toString));
    end;
  end;
 
var
  RequestCode: integer;
  ImagePath: string;
begin
  if M is TMessageReceivedImagePath then
  begin
    ImagePath := (M as TMessageReceivedImagePath).Value;    ////////////////// <<<----------- file here returned is OFF by a few seconds then what I see browsing the phone.
    RequestCode := (M as TMessageReceivedImagePath).RequestCode;
    // we just want to make 100% this is from the camera...
    if RequestCode = TJFMXMediaLibrary.JavaClass.ACTION_TAKE_IMAGE_FROM_CAMERA then
    begin
      ImagePath := (M as TMessageReceivedImagePath).Value;
      DeleteImageFileCompletely(ImagePath);
    end;
  end;
end;
 
procedure TForm30.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
begin
  Image1.Bitmap.Assign(Image);
end;
 
procedure TForm30.TakePhotoFromCameraAction1DidCancelTaking;
begin
 // do nothing
end;
 
end.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  26 api dosya acma hatasi codder71 0 73 23-05-2018, Saat: 22:36
Son Yorum: codder71
  Camera-Galeri Fotograf Alma Problemi Api 24+ (FileProvider) bilrax 1 136 22-05-2018, Saat: 22:49
Son Yorum: codder71
Question farklı dosya boyutu sıkıntısı BY-HAYALET 2 210 31-01-2018, Saat: 11:17
Son Yorum: BY-HAYALET
Question proje dosya boyutu sorunu BY-HAYALET 9 381 23-01-2018, Saat: 14:21
Son Yorum: BY-HAYALET
  Android Servis sms bilgilerini alma bilsoft8b 0 244 08-11-2017, Saat: 15:07
Son Yorum: bilsoft8b



Konuyu Okuyanlar: 1 Ziyaretçi