Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Niektóre pliki obrazów zawierają metadane, które można odczytać, aby określić funkcje obrazu. Na przykład cyfrowe zdjęcie może zawierać metadane, które można odczytać w celu określenia makijażu i modelu aparatu używanego do przechwytywania obrazu. Za pomocą interfejsu GDI+można odczytywać istniejące metadane, a także zapisywać nowe metadane w plikach obrazów.
GDI+ przechowuje pojedynczy element metadanych w PropertyItem obiekcie. Właściwość obiektu można odczytać, PropertyItemsImage aby pobrać wszystkie metadane z pliku. Właściwość PropertyItems zwraca tablicę PropertyItem obiektów.
Obiekt PropertyItem ma następujące cztery właściwości: Id, , ValueLeni Type.
Id
Tag identyfikujący element metadanych. Niektóre wartości, które można przypisać do Id , są wyświetlane w poniższej tabeli:
| Wartość szesnastkowa | Opis |
|---|---|
| 0x0320 0x010F 0x0110 0x9003 0x829A 0x5090 0x5091 |
Tytuł obrazu Producent sprzętu Model sprzętu ExifDTOriginal Czas ekspozycji exif Tabela Luminance Tabela chrominance |
Wartość
Tablica wartości. Format wartości jest określany przez Type właściwość .
Len
Długość (w bajtach) tablicy wartości wskazywanych przez Value właściwość .
Typ
Typ danych wartości w tablicy wskazywany Value przez właściwość . Formaty wskazywane przez Type wartości właściwości są wyświetlane w poniższej tabeli:
| Wartość liczbowa | Opis |
|---|---|
| 1 | Polecenie Byte |
| 2 | Tablica Byte obiektów zakodowanych jako ASCII |
| 3 | 16-bitowa liczba całkowita |
| 4 | 32-bitowa liczba całkowita |
| 5 | Tablica dwóch Byte obiektów reprezentujących liczbę racjonalną |
| 6 | Nie używane |
| 7 | Niezdefiniowane |
| 8 | Nie używane |
| 9 | SLong |
| 10 | SRational |
Przykład
Poniższy przykład kodu odczytuje i wyświetla siedem fragmentów metadanych w pliku FakePhoto.jpg. Drugi element właściwości (indeks 1) na liście ma Id 0x010F (producent sprzętu) i Type 2 (tablica bajtów zakodowana w formacie ASCII). W przykładzie kodu wyświetlana jest wartość tego elementu właściwości.
// 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 generuje dane wyjściowe podobne do następujących:
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.
Kompilowanie kodu
Powyższy przykład jest przeznaczony do użycia z formularzami systemu Windows i wymaga PaintEventArgse, który jest parametrem programu obsługi zdarzeń Paint. Obsłuż zdarzenie formularza Paint i wklej ten kod do procedury obsługi zdarzeń malowania. Musisz zastąpić FakePhoto.jpg nazwą obrazu i ścieżką prawidłową w systemie i zaimportować System.Drawing.Imaging przestrzeń nazw.
Zobacz także
.NET Desktop feedback