Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Image nesnesinde resim olup olmadığın kontrolü
#1
Merhaba

Vcl tarafında
if Assigned(Resim1.Picture.graphic) then
komutuyla image nesnesinin içerisinde resim olup olmadığını kontrol ediyorum.

Android tarafında böyle bir kontrolü nasıl yapabilirim?

İyi Çalışmalar.
Cevapla
#2
(17-03-2019, Saat: 09:05)41linea41 Adlı Kullanıcıdan Alıntı: Merhaba

Vcl tarafında
if Assigned(Resim1.Picture.graphic) then
komutuyla image nesnesinin içerisinde resim olup olmadığını kontrol ediyorum.

Android tarafında böyle bir kontrolü nasıl yapabilirim?

İyi Çalışmalar.

Resim1.Bitmap.Width >0
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#3
Merhaba.

- Şahsen bir TImage içinde resim bulundurursam TAG vs. bir yerlere not eder normalde bilirim.

- Direkt cevap yazmak yerine sizin için eğitici olsun diye ( bu tip sorunsala nasıl cevap aranır ) şeklinde şöyle bir yöntem sunacağım.

- TImage ( FMX için ) tanımlı olduğu kaynak Unit'e bakarak ve buradan yürüyerek nil olup olmadığına cevap arayacağız. Nasıl mı ?

// "c:\Program Files (x86)\Embarcadero\Studio\20.0\source\fmx\FMX.Objects.pas" dosyasıdır.
  TImage = class(TControl, IBitmapObject, IMultiResBitmapObject)

tanımının içinde Bitmap property'si bakıldığında diyor ki...

  public
   constructor Create(AOwner: TComponent); override;
   ... ... ...
   property Bitmap: TBitmap read GetBitmap write SetBitmap;

Biliyoruz ki siz Bitmap'a bir TBitmap eşitlediğinizde write kısmı yani "SetBitmap" çalışır, tersi TImage.Bitmap'i bir TBitmap'e eşitler gibi içeriğini sorarsanız "GetBitmap"  çalışır.

Şimdi sizin ilgilendiren kısım GetBitmap olduğuna göre aynı UNIT içindeki bu function'u beraber inceleyelim.

function TImage.GetBitmap: TBitmap;
var
 Item: TCustomBitmapItem;
begin
 Result := nil;
 // Return the most appropriate non-empty picture
 Item := ItemForCurrentScale(False);
 if Item <> nil then
   Result := Item.Bitmap;
 if Result = nil then
 begin
   // If there isn't non-empty pictures, then return an empty picture for the screen scale (exact match)
   Item := FMultiResBitmap.ItemByScale(FScreenScale, True, True);
   if Item <> nil then
     Result := Item.Bitmap;
 end;
 if Result = nil then
 begin
   // If there isn't item at the given scale, then create a new item with specified screen scale
   Item := FMultiResBitmap.Add;
   Item.Scale := FScreenScale;
   Result := Item.Bitmap;
 end;
end;

Anlaşılıyor ki özetle ITEM varsa uygun SCALE içim uygun resmi koyar, eğer yoksa sonuna kadar result "nil" dönmesine karşılık nihayetinde "nil" kalmasın diye nesnenizin boyutlarında yeni boş bir tane otomatik oluşturuluyor.

Diyebiliriz ki eğer nil'e eşitse VCL tarafında if Assigned( Image1 ) then dercesine bir sorgu maalesef yok. FMX tarafında if Image1.Bitmap = nil then derseniz de benzeri şekilde içindeki Bitmap'i sorgulayan başka bir şey de olmayacak size ilk satırda ifade ettiğim şekilde atama zamanı bir yere not edip bunun takibi düşecek.  Idea
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#4
Cevaplarınız için teşekkür ederim.

Soruyu sormadan önce dün gece iş de ilerlemek için geçici olarak herimage nesnesinin durumunu bir boolean a atadım ve bu şekilde devam ettim. Demekki doğru yoldaymışım.

Şimdi değişkeni kontrol ederek android den indy ile resim göndermeye çalışıyorum.
Cevapla
#5
Merhaba,
Hazır atanmışı da var: bitmap.isEmpty
Cevapla
#6
@"Fesih ARSLAN" FMX.Graphics unitindeki TBitmap'den yürümüşsünüz güzeldi  Smile

- TBitmap için isEmpty function aşağıdaki gibi

function TBitmap.IsEmpty: Boolean;
begin
 Result := (Width = 0) or (Height = 0);
end;

Ancak Width veya Height  (0) olursa TRUE dönüyor. Denediğinizi değerlendirerek teşekkürler üstadım. Idea

EK : Anlatmak istediğim    Item.Scale := FScreenScale; kısmından kasıt. En az bir kere GetBitmap çalıştıran seçenek hayata geçmezse bu da sorun olmazdı.  Ama Bitmap.IsEmtpy dediğiniz an bu da ( TImage.GetBitmap: TBitmap; ) mecbur çalışacak.


Şimdi üşenmedim denedim...
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Image1.Bitmap.IsEmpty then ShowMessage( 'Empty' ) else ShowMessage( 'Not Empty' );
end;

- Cevap Empty   Rolleyes
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  FMX Listview Image Sorunu [ÇÖZÜLDÜ] Mesut 1 330 20-10-2023, Saat: 15:03
Son Yorum: Mesut
  Tıklanılan Image'yi Android Galeride Açmak kajmerantime 7 922 06-10-2023, Saat: 09:10
Son Yorum: kajmerantime
  Image Kalite Nasıl yükseltilir? barissagir 1 299 28-09-2023, Saat: 18:52
Son Yorum: hi_selamlar
  [Çözüldü] FMX Android uygulaması ile sunucuya resim yükleme Mesut 2 522 25-07-2023, Saat: 00:40
Son Yorum: Mesut
  Galerinden resim eklediğim zaman yönünün değişmesi codder71 4 878 24-07-2023, Saat: 18:32
Son Yorum: codder71



Konuyu Okuyanlar: 1 Ziyaretçi