2016-07-26 11 views
2

を縮小からFireMonkeyの防止:は、問題の写真

私は写真を撮るために必要FireMonkeyの(XE 10.1ベルリン)でモバイルアプリを持っています。問題は、FireMonkeyが、少なくともAndroidでは、私の画像サイズをはるかに小さくするように見えるということです。 私自身のアプリだけでなく、FireMonkeyに付属のPhotoEditorデモアプリでも起こるとは限りません。

FireMonkeyの外でカメラで撮影すると、画像サイズは約6 - 7 Mb、サイズは5184 x 2916ピクセルです。
アプリを使用して写真を撮ったり、PhotoEditorデモアプリを使用すると、画像のサイズは140〜180 KBと365 x 648ピクセルになります。

これはAndroidで発生します。私は便利なMacを持っていないので、現時点ではiPadまたはiPhoneでこれをテストすることはできません。私がこれまでに見つけた何

を私はこの問題が発生した場所を見つけるために、コードにブレークポイントを設定しました。 OnDidFinishTakingイベントハンドラが呼び出されると、受信したイメージはすでに縮小されています。

procedure TImageManagerAndroid.DidReceiveBitmap(const Sender: TObject; const M: TMessage);からイベントが呼び出され、FMX.MediaLibrary.Android.pasにあります。 は、このイベントでは、私はラインを参照してください。

Photo := TBitmap.CreateFromFile(ImagePath); 

ImagePathはすでに縮小されているデバイス、上の.jpgファイルを参照します。コールスタックのさらに下探し

は、私は、この手順はFMX.Platform.Android.pasに住んでいる

procedure TFMXNativeActivityListener.onReceiveImagePath(ARequestCode: Integer; AFileName: JString); 

への呼び出しを参照してください。 このプロシージャの宣言を見ると、キーワードcdeclが続きます。これは、このメソッドがネイティブAndroidコードから呼び出されたことを意味する可能性があります。

私はまたthis tutorialを見ました。ここでは、手順はIFMXCameraService.TakePhotoです。 PhotoEditorのデモで使用されているのはではなく、です!
RequiredResolutionフィールドを含むパラメータでレコードを取得するため、これを使用するオプションがあります。しかし、私はPhotoEditorのデモと同様のアプローチを使用することをお勧めします。

質問:
FireMonkeyが写真を縮小するのを防ぐにはどうしたらいいですか?

答えて

5

FireMonkeyには、TTakeCustomPhotoActionで撮影した写真のデフォルトの最大幅と高さが設定されています。画像がその最大サイズに収まらない場合、画像は縮小されます。シュリンクファクターは常に2の累乗であるため、フィットするまでFireMonkeyはイメージを半分に保っているようです。

TTakeCustomPhotoActionTTakePhotoFromCameraActionの直接基本クラス)は、MaxWidthMaxHeightという2つのプロパティを定義しています。何らかの理由で、どちらもデフォルトは1024です。はるかに高い値にデフォルト値を設定することにより

、たとえば8192のために、あなたは収縮を防ぐことができます。

actTakePhotoFromCameraAction1.MaxWidth := Max(8192, actTakePhotoFromCameraAction1.MaxWidth); 
actTakePhotoFromCameraAction1.MaxHeight := Max(8192, actTakePhotoFromCameraAction1.MaxHeight); 

これらのデフォルトのプロパティはタイプCardinalのものであり、彼らは(4.294.967.295の最大値を持つ意味0xFFFFFFFF) - 8バイトの符号なしの値です。

+0

IFmXCameraService.TakePhotoをTParamsPhotoQueryと一緒に使用する場合、maxwidthとmaxheightを設定する方法はありますか? – sandman

関連する問題