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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
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
  listview resim çekme theercan 0 51 29-07-2019, Saat: 10:48
Son Yorum: theercan
  ClientDataSet image field yükleme (DataSnap) 41linea41 3 190 22-07-2019, Saat: 08:13
Son Yorum: Fesih ARSLAN
  Resimi spinner yada image combo box da gösterme 41linea41 1 95 18-07-2019, Saat: 21:28
Son Yorum: narkotik
  ListView'den İmage'e Aktarma ? Mr.Developer 2 233 29-05-2019, Saat: 10:56
Son Yorum: Mr.Developer
  Circle - İmage Sorunu ? Mr.Developer 4 365 15-05-2019, Saat: 08:57
Son Yorum: Mr.Developer



Konuyu Okuyanlar: 1 Ziyaretçi