2016-04-02 7 views
1

モバイルアプリでは、Webサービスにアップロードする前に、1つまたは複数の画像(jpeg/jpgのみ)(内蔵のカメラまたは写真ライブラリから選択)が表示されます。Firemonkey:JPEGをイメージコントロールにロードしてファイルやストリームに保存すると、ファイルのサイズが小さくなります。これは避けられますか?

しかし、画像をFMX TImage/TImageControl/TImageViewerにロードしてストリーム(またはファイル)に保存すると、約45%小さくなります。

なぜこのようなことが起こり、サイズの縮小を回避する方法があるのでしょうか?このために尋ねたよう

は、簡単なテストコード、それに何も特別です:

procedure TImageTest.btnTestClick(Sender: TObject); 
var 
    aFile : string; 
begin 
    if not OpenDialog.Execute then 
    Exit; 
    // get jpg file name for loading 
    aFile := OpenDialog.Filename; 
    // load into TImage, TImageControl or TImageViewer 
    ImageViewer.Bitmap.LoadFromFile(aFile); 
    // and save to file for comparison 
    ImageViewer.Bitmap.SaveToFile(aFile+'_2.jpg'); 
end; 
+0

どこでデバッグヘルプを求めましたか?または、コードが機能していない理由を尋ねますか?最も簡単なテストアプリで簡単に再現できる、firemonkeyイメージコンポーネントの動作に関する質問です。 –

+1

Jpegは無敗フォーマットではありません。荷物を積み込んだ後に保管すると、品質がいくらか損なわれます。なぜあなたはそのような品質の低下を経験しているのですか?イメージをWebサービスにアップロードする必要がある場合は、FMXコントロールからの中間表現の代わりに元のファイルストリームをアップロードします。 –

+0

使用しているデルファイのバージョンはどれですか? –

答えて

1

画像品質を失うことを避けるための理想的なソリューションは、データを格納するためのビジュアルコントロールに頼らないことです。代わりに、生のイメージファイルを含む背景オブジェクトを保持し、視覚コントロールを使用してこのイメージをユーザーに表示するだけです。画像を保存する場合、視覚的なコントロールではなく、このバックグラウンドオブジェクトから画像を保存します。

プログラミングのすべての側面に同じ概念が適用されます。ビジュアルコントロールは、データを格納するのではなく、ユーザーに視覚的に表示するためのものです。

+0

イメージはモバイルデバイス上のファイルとして扱われません。データはカメラまたはライブラリのTBitmapオブジェクトとして提供されます。表示は、アップロード前の最終チェックのためのもので、保存用ではありません。しかし一方で、イメージコントロールはイメージを格納するためにTBitmapを使用するだけです - イメージデータを別のバックグラウンドTBitmapオブジェクトに保存することとの違いはどこですか?アップロード前に一時ファイルに保存されている場合は、サイズの縮小という問題に戻ります。 –

+0

ビジュアルコントロールかどうかは実際問題ではありません。あなたはファイルを記録しています。どうして? –

+0

ファイルを記録する場所はどこですか? –

関連する問題