ImageBitmap ve ImageVector karşılaştırması

En yaygın iki resim biçimi türü raster ve vektör resimlerdir.

Bir raster grafik biçimi, renk içeren küçük kareler olan piksellerden oluşur (kırmızı, yeşil, mavi ve alfa değerlerinden oluşur). Çok sayıda pikseli bir araya getirdiğinizde fotoğraf gibi çok ayrıntılı bir görüntü oluşturabilirsiniz. Rastgele grafiklerin çözünürlüğü sabittir (piksel sayısı sabittir). Bu, görüntünün boyutunu büyüttüğünüzde ayrıntılarını kaybedeceği ve piksellerin görünebileceği anlamına gelir. Raster grafik biçimlerine örnek olarak JPEG, PNG ve WEBP verilebilir.

JPEG dosyası örneği
Şekil 1: JPEG dosyası örneği

Vektör resimler ise ekrandaki bir görsel öğenin ölçeklenebilir matematiksel gösterimleridir. Vektör, görüntünün ekranda nasıl çizileceğini açıklayan bir komutlar kümesidir (ör. çizgi, nokta veya dolgu). Ekranda bir vektör ölçeklendirilirken matematiksel formül farklı komutlar arasındaki ilişkiyi koruyacağından kalite kaybı olmaz. ImageVector'a iyi bir örnek, matematiksel formüllerle tanımlanabilen Material Symbols'dür.

Vektör örneği (dosya uzantıları .xml veya Kotlin kodunda tanımlanır)
Şekil 2: Vektör örneği (dosya uzantıları .xml veya Kotlin kodunda tanımlanır)

ImageBitmap

Compose'da, bir raster resim (genellikle Bitmap olarak adlandırılır) bir ImageBitmap örneğine yüklenebilir ve BitmapPainter, bit eşlemi ekrana çizmekten sorumludur.

Basit kullanım alanlarında, painterResource() kullanılabilir. Bu yöntem, ImageBitmap oluşturur ve Painter nesnesi (bu durumda BitmapPainter) döndürür:

Image(
    painter = painterResource(id = R.drawable.dog),
    contentDescription = stringResource(id = R.string.dog_content_description)
)

Daha fazla özelleştirmeye (ör. özel boyama uygulaması) ihtiyacınız varsa ve ImageBitmap öğesine erişmeniz gerekiyorsa aşağıdaki şekilde yükleyebilirsiniz:

val imageBitmap = ImageBitmap.imageResource(R.drawable.dog)

ImageVector

Bir VectorPainter, ekrana ImageVector çizmekle sorumludur. ImageVector, SVG komutlarının bir alt kümesini destekler. Tüm resimler vektör olarak gösterilemez (örneğin, kameranızla çektiğiniz fotoğraflar vektöre dönüştürülemez).

Mevcut bir vektör çizilebilir XML dosyasını (içe aktarma aracı kullanılarak Android Studio'ya aktarılır) içe aktararak veya sınıfı uygulayıp yol komutlarını manuel olarak vererek özel bir ImageVector oluşturabilirsiniz.

Basit kullanım alanlarında, painterResource() işlevi ImageBitmap sınıfı için nasıl çalışıyorsa ImageVectors için de aynı şekilde çalışır ve sonuç olarak VectorPainter değerini döndürür. painterResource(), VectorDrawables ve BitmapDrawables öğelerinin sırasıyla VectorPainter ve BitmapPainter içine yüklenmesini sağlar. Bir resme VectorDrawable yüklemek için şunu kullanın:

Image(
    painter = painterResource(id = R.drawable.baseline_shopping_cart_24),
    contentDescription = stringResource(id = R.string.shopping_cart_content_desc)
)

Daha fazla özelleştirme yapmanız gerekiyorsa ve ImageVector öğesine erişmeniz lazımsa aşağıdaki şekilde yükleyebilirsiniz:

val imageVector = ImageVector.vectorResource(id = R.drawable.baseline_shopping_cart_24)