Nasıl yapılır: Görüntü Meta Verilerini Okuma
Bazı görüntü dosyaları, görüntünün özelliklerini belirlemek için okuyabileceğiniz meta veriler içerir. Örneğin dijital fotoğraf, görüntüyü yakalamak için kullanılan kameranın modelini ve modelini belirlemek için okuyabileceğiniz meta veriler içerebilir. GDI+ ile mevcut meta verileri okuyabilir ve görüntü dosyalarına yeni meta veriler yazabilirsiniz.
GDI+ tek bir meta veri parçasını bir PropertyItem nesnede depolar. Bir dosyadan PropertyItems tüm meta verileri almak için bir Image nesnenin özelliğini okuyabilirsiniz. PropertyItems özelliği bir nesne dizisi PropertyItem döndürür.
Bir PropertyItem nesne şu dört özelliğe sahiptir: Id
, Value
, Len
ve Type
.
Id
Meta veri öğesini tanımlayan etiket. Atanabilecek Id bazı değerler aşağıdaki tabloda gösterilmiştir:
Onaltılık değer | Açıklama |
---|---|
0x0320 0x010F 0x0110 0x9003 0x829A 0x5090 0x5091 |
Resim başlığı Ekipman üreticisi Ekipman modeli ExifDTOriginal Açığa çıkarma süresi Parlaklık tablosu Chrominance tablosu |
Değer
Bir değer dizisi. Değerlerin biçimi özelliği tarafından Type belirlenir.
Len
Özelliği tarafından işaret edilen değer dizisinin uzunluğu (bayt cinsinden).Value
Tür
Özelliği tarafından işaret edilen dizideki değerlerin Value
veri türü. Özellik değerleri tarafından Type
belirtilen biçimler aşağıdaki tabloda gösterilmiştir:
Sayısal değer | Açıklama |
---|---|
1 | Byte |
2 | ASCII olarak kodlanmış bir nesne dizisi Byte |
3 | 16 bit tamsayı |
4 | 32 bit tamsayı |
5 | Rasyonel bir sayıyı temsil eden iki Byte nesneden oluşan bir dizi |
6 | Kullanılmıyor |
7 | Undefined |
8 | Kullanılmıyor |
9 | SLong |
10 | SRational |
Örnek
Aşağıdaki kod örneği dosyasında FakePhoto.jpg
yedi meta veri parçasını okur ve görüntüler. Listedeki ikinci (dizin 1) özellik öğesi 0x010F (ekipman üreticisi) ve Type 2 (ASCII kodlu bayt dizisi) içerirId. Kod örneği, bu özellik öğesinin değerini görüntüler.
// Create an Image object.
Image image = new Bitmap(@"c:\FakePhoto.jpg");
// Get the PropertyItems property from image.
PropertyItem[] propItems = image.PropertyItems;
// Set up the display.
Font font = new Font("Arial", 12);
SolidBrush blackBrush = new SolidBrush(Color.Black);
int X = 0;
int Y = 0;
// For each PropertyItem in the array, display the ID, type, and
// length.
int count = 0;
foreach (PropertyItem propItem in propItems)
{
e.Graphics.DrawString(
"Property Item " + count.ToString(),
font,
blackBrush,
X, Y);
Y += font.Height;
e.Graphics.DrawString(
" id: 0x" + propItem.Id.ToString("x"),
font,
blackBrush,
X, Y);
Y += font.Height;
e.Graphics.DrawString(
" type: " + propItem.Type.ToString(),
font,
blackBrush,
X, Y);
Y += font.Height;
e.Graphics.DrawString(
" length: " + propItem.Len.ToString() + " bytes",
font,
blackBrush,
X, Y);
Y += font.Height;
count++;
}
// Convert the value of the second property to a string, and display
// it.
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
string manufacturer = encoding.GetString(propItems[1].Value);
e.Graphics.DrawString(
"The equipment make is " + manufacturer + ".",
font,
blackBrush,
X, Y);
'Create an Image object.
Dim image As Bitmap = New Bitmap("c:\FakePhoto.jpg")
'Get the PropertyItems property from image.
Dim propItems As PropertyItem() = image.PropertyItems
'Set up the display.
Dim font As New Font("Arial", 12)
Dim blackBrush As New SolidBrush(Color.Black)
Dim X As Integer = 0
Dim Y As Integer = 0
'For each PropertyItem in the array, display the ID, type, and length.
Dim count As Integer = 0
Dim propItem As PropertyItem
For Each propItem In propItems
e.Graphics.DrawString( _
"Property Item " & count.ToString(), _
font, _
blackBrush, _
X, Y)
Y += font.Height
e.Graphics.DrawString( _
" id: 0x" & propItem.Id.ToString("x"), _
font, _
blackBrush, _
X, Y)
Y += font.Height
e.Graphics.DrawString( _
" type: " & propItem.Type.ToString(), _
font, _
blackBrush, _
X, Y)
Y += font.Height
e.Graphics.DrawString( _
" length: " & propItem.Len.ToString() & " bytes", _
font, _
blackBrush, _
X, Y)
Y += font.Height
count += 1
Next propItem
'Convert the value of the second property to a string, and display it.
Dim encoding As New System.Text.ASCIIEncoding()
Dim manufacturer As String = encoding.GetString(propItems(1).Value)
e.Graphics.DrawString( _
"The equipment make is " & manufacturer & ".", _
font, _
blackBrush, _
X, Y)
Kod aşağıdakine benzer bir çıkış oluşturur:
Property Item 0
id: 0x320
type: 2
length: 16 bytes
Property Item 1
id: 0x10f
type: 2
length: 17 bytes
Property Item 2
id: 0x110
type: 2
length: 7 bytes
Property Item 3
id: 0x9003
type: 2
length: 20 bytes
Property Item 4
id: 0x829a
type: 5
length: 8 bytes
Property Item 5
id: 0x5090
type: 3
length: 128 bytes
Property Item 6
id: 0x5091
type: 3
length: 128 bytes
The equipment make is Northwind Camera.
Kod Derleniyor
Yukarıdaki örnek, Windows Forms ile kullanılmak üzere tasarlanmıştır ve olay işleyicisinin Paint parametresi olan öğesini gerektirir.PaintEventArgs e
Formun Paint olayını işleyip bu kodu paint olay işleyicisine yapıştırın. öğesini sisteminizde geçerli bir görüntü adı ve yolla değiştirmeniz FakePhoto.jpg
ve ad alanını System.Drawing.Imaging
içeri aktarmanız gerekir.
Ayrıca bkz.
.NET Desktop feedback