Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Bildinformationen selbst ermitteln

Geschrieben von: Christoph Wille
Kategorie: ASP.NET

Ein häufiges Problem beim Upload von Bilddateien ist, daß die Größe (Breite, Höhe) nicht bekannt ist, und man sie selbst ermitteln muß. Unter ASP kann man sich mit der Gratiskomponente ImageSize von ServerObjects behelfen, die allerdings auf wenige (wichtige) Formate beschränkt ist.

Mit Hilfe des .NET Frameworks hingegen kann man sich selbst eine ImageInfo Komponente programmieren, ohne daß dies in groben Aufwand ausartet - man muß nur die Bitmap Klasse zu seinem Vorteil verwenden. Und schon bekommt man Größeninformationen zu den wichtigsten Bildformaten!

Die ImageInfo Komponente erstellen

Ich habe mich entschlossen, die Funktionalität der Ermittlung von Bildinformationen in eine eigene Klasse auszulagern. Diese Klasse hat folgende Methoden und Eigenschaften:

  • void Load(string): Lädt die angegebene Bilddatei.
  • [get] int Width: Auslesen der Bildbreite.
  • [get] int Height: Auslesen der Bildhöhe.
  • [get] string Format: Auslesen des Bildformats ("JPEG", etc).

Die Eigenschaften sind klarerweise Nur-Lese Eigenschaften, die mit Hilfe von Accessors implementiert sind. Aus Faulheitsgründen fängt die Klasse selbst keine Exceptions ab, diese werden an den Aufrufer durchgereicht (Datei nicht existent, kein gültiges Format, ...).

Der vollständige Sourcecode sieht wie folgt aus (ImageInfo.cs):

using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace AspHeute
{
 public class ImageInfo
 {
   Bitmap m_bmpRepresentation;
   
   public void Load(string strImageFile)
   {
    m_bmpRepresentation = new Bitmap(strImageFile, false);
   }

   public int Height
   {
     get { return m_bmpRepresentation.Height; }
   }
   
   public int Width
   {
     get { return m_bmpRepresentation.Height; }
   }  
   
   public string Format
   {
     get 
     {
      ImageFormat bmpFormat = m_bmpRepresentation.RawFormat;
      string strFormat = "unidentified format";
      
	  if (bmpFormat.Equals(ImageFormat.Bmp)) strFormat = "BMP";
	  else if (bmpFormat.Equals(ImageFormat.Emf)) strFormat = "EMF";
	  else if (bmpFormat.Equals(ImageFormat.Exif)) strFormat = "EXIF";
	  else if (bmpFormat.Equals(ImageFormat.Gif)) strFormat = "GIF";
	  else if (bmpFormat.Equals(ImageFormat.Icon)) strFormat = "Icon";
	  else if (bmpFormat.Equals(ImageFormat.Jpeg)) strFormat = "JPEG";
	  else if (bmpFormat.Equals(ImageFormat.MemoryBmp)) strFormat = "MemoryBMP";
	  else if (bmpFormat.Equals(ImageFormat.Png)) strFormat = "PNG";
	  else if (bmpFormat.Equals(ImageFormat.Tiff)) strFormat = "TIFF";
	  else if (bmpFormat.Equals(ImageFormat.Wmf)) strFormat = "WMF";
      
      return strFormat;
     }
   }
 }
}

Der Großteil des Codes findet sich im Accessor für das Bildformat (Format), da das Bildformat als GUID definiert ist, und ich somit die Vergleiche mit Equals durchführen muß. Allerdings bekommt der Anwender der Komponente einen einfach weiterzuverwendenden String geliefert, zB für ein Select Case in VB.NET

Das Laden des Bitmaps geschieht mit dem Konstruktor der Bitmap Klasse in der Load Methode. Ab diesem Zeitpunkt ist das Bitmap im Speicher, und zwar vollständig. Da Speicher in .NET mit Hilfe des Garbage Collectors gemanaged wird, sollte man die Bitmap Klasse und das ImageInfo Objekt daher nach Verwendung so schnell als möglich explizit (=selbst) aus dem Speicher entfernen, und zwar mit Hilfe einer Dispose Methode, die ich nicht eingebaut habe (Bastelübung für den Leser):

public void Dispose()
{
  m_bmpRepresentation.Dispose();
}

Diese Methode sollte man nach der letzten Verwendung der ImageInfo Klasse aufrufen, was die Performance der Applikation deutlich hebt. Generell gilt unter .NET, daß man Resourcen selbst so bald als möglich explizit freigeben soll! Das Warten auf den Garbage Collector kann zur (Performance)Falle werden.

Kompiliert wird die Komponente mittels der im Download beigefügten Batchdatei compile.bat. Nach erfolgter Kompilierung muß man die Komponente noch in das bin Verzeichnis der Website kopieren, und schon kann man diese in allen ASP.NET Seiten verwenden.

Die Komponente im Einsatz

Da die Komponente nicht gerade "viel" an Funktionalität bietet, ist die Verwendung denkbar einfach. Der einzige wichtige Punkt ist die Fehlerbehandlung - da ich in der Komponente auf Exceptionhandling verzichtet habe, muß man dieses in der ASP.NET Datei nachholen (demo.aspx):

<% @Page Language="C#" %>
<% @Import Namespace="AspHeute" %>
<%
string strImageFile = Page.MapPath("myImage.jpg");
bool bLoadedOK = true;
ImageInfo imgInfo = new ImageInfo();

try
{
  imgInfo.Load(strImageFile);
}
catch (Exception e)
{
  Response.Write(e.ToString());
  bLoadedOK = false;
}

if (bLoadedOK)
{
  Response.Write("Breite: " + imgInfo.Width + "<br>");
  Response.Write("Höhe: " + imgInfo.Height + "<br>");
  Response.Write("Bildformat: " + imgInfo.Format + "<br>");
}
%>

Bei diesem Sourcecode dürfte eigentlich alles klar sein. Es ist jeder herzlich eingeladen, verschiedene Bilddateien und -formate auszuprobieren!

Schlußbemerkung

Wieder einmal rettet .NET den Tag dadurch, daß es enorm viel Funktionalität gratis zur Verfügung stellt, und man nur danach suchen muß. Und das Beste ist, die heute vorgestellte ImageInfo Komponente ist in allen .NET Applikationen verwendbar, nicht nur in ASP.NET Seiten.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

.NET Komponenten in COM+ Clients einsetzen
Eine kleine Bilddatenbank, Teil 1
Thumbnailgenerierung in .NET
Thumbnails mit ASP generieren

Links zu anderen Sites

ImageSize

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.