2016-04-02 62 views
1

Bir mobil uygulamada, bir web servisine yüklenmeden önce bir veya daha fazla resim (sadece jpeg/jpg) - yerleşik kamera ile çekilmiş veya fotoğraf kitaplığından seçili olarak görüntülenir. Ancak bir görüntüyü bir FMX TImage/TImageControl/TImageViewer içine yükleyip akıma (veya dosyaya) kaydetmek,% 45 daha küçük olmasını sağlar.Firemonkey: Herhangi bir görüntü denetimi türüne bir JPEG yerleştirme ve ardından dosyaya veya yayına kaydetme işlemi daha küçük yapar. Bu önlenebilir mi?

Bunun neden olduğuyla ilgili herhangi bir fikrin var mı ve boyutta azalmayı önlemek için bir yol var mı? Bu istedi gibi

kendisine özel basit bir test kodu, başka bir şey değildir:

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

Hata ayıklama yardımı için nereden yardım istedim? Veya kodun neden çalışmadığını soruyor musunuz? Bu basit simge uygulaması ile kolayca çoğaltılabilir firemonkey görüntü bileşenlerinin davranışı üzerine bir sorudur. –

+1

Jpeg kayıpsız format değil. Herhangi bir yükleme ve daha sonra tasarruf bazı kalite kaybı tanıtacak. Neden böyle bir kalite kaybı yaşıyorsanız, kodunuz tam olarak söylemek zor. Resmi web hizmetine yüklemeniz gerekiyorsa, FMX kontrollerinden ara temsil yerine orijinal dosya akışını yükleyin. –

+0

Hangi Delphi sürümünü kullanıyorsunuz? –

cevap

1

ideal çözüm verilerinizi depolamak için görsel kontroller güvenerek vermeyerek görüntü kalitesini edilir kaybetmemek için. Bunun yerine, ham görüntü dosyasını içeren bir arka plan nesnesini tutun ve yalnızca bu görüntüyü kullanıcıya göstermek için görsel denetimleri kullanın. Görüntüyü kaydetmek söz konusu olduğunda, görsel kontrol yerine bu arka plan nesnesinden kaydedin.

Aynı kavram, programlama ile ilgili tüm yönler için de geçerlidir - görsel kontroller, yalnızca veriyi görüntülemek için değil, kullanıcıya görsel gösterim içindir.

+0

Resimler, mobil aygıtlardaki dosyalar olarak ele alınmıyor, veriler kameradan veya kitaplıktan TBitmap nesneleri olarak geliyor. Görüntüleme, yalnızca depolama için değil, yüklemeden önce son kontrol içindir. Ancak diğer yandan görüntü kontrolü sadece görüntüleri saklamak için TBitmap kullanır - bu nedenle görüntü verilerini başka bir arka plan TBitmap nesnesinde tutmanın farkı nedir? Yüklemeden önce geçici bir dosyada saklanırsa, sorunuma geri dönüyorum: boyut küçültme. –

+0

Görsel denetimler veya gerçekten sorun değil. Dosyayı kurtarıyorsun. Niye ya? –

+0

Dosyayı yeniden kaydettiğimi nereden söyledim? –