Fragen zu Drawing.Image und WebControls.Image

ja mir is schon klar, dass ich das nicht mach und dass ich das bis jetzt nicht hin bekommen hab. Bis jetzt dacht ich, das liegt an mir und ich weiss nur nicht wies funktioniert, aber das geht ueberhaupt nicht? Geht es prinzipiel nicht zwei Drawing.Image Objekte gleichzeitig darzustellen?
 
Hallo.

Nur mal ein kurzer Tip zum Thema Kompression, falls dir das in irgendeiner Weise hilft:
Mit diesem Support-Artikel über JPEG-Kompression haben wir bei uns in der Firma die für eine Fotogalerie hochgeladenen Bilder komprimiert.
Mit
Code:
private Bitmap GetThumbnail(Bitmap bmp)
{
    // Orginalmaße speichern und Skalierfaktor berechnen
    int width = bmp.Width;
    int height = bmp.Height;
    double scaleFactor = (double)width / (double)height;

    // Neue Maße Speichern
    // Entweder 90 px breit oder 60 px hoch
    int newWidth = 90; 
    int newHeight = 60;
    if (newHeight * scaleFactor <= newWidth)
        // 60 px hoch
        newWidth = (int)(newHeight * scaleFactor); 
    else 
        // 90 px breit
        newHeight = (int)(newWidth / scaleFactor);
			
    // Thumbnailbild erstellen und zurückliefern
    return ((Bitmap) bmp.GetThumbnailImage(newWidth, newHeight, null,IntPtr.Zero));
}
werden die einzelnen Thumbnails erstellt (Das geht auch mit etwas Aufwand mit System.Drawing.Image-Objekten).
Hier noch ein kurzer Ausschnitt, wie bei uns der Tabellenaufbau dynamisch realisiert wurde:
Code:
private void createGallery()
{
    // Anzahl der Bilder
    int intImageAmount = fileInfo.Length;
    // Kein Bild vorhanden, dann Methode beenden
    if (intImageAmount == 0)
        return;
    // Bilderzähler
    int intCurrentImageCount = 0;
    // Tabellenaufbau starten
    Label lbl1 = new Label();
    lbl1.Text = "<table width='100%' border='0'>";
    thisPanelGallery.Controls.Add(lbl1);
    while (true)
    {
        // Tabellenaufbau Fortsetzung
        Label lbl2 = new Label();
        lbl2.Text = "<tr>";
        lbl2.Text +=	"<td width='*'></td>";
        thisPanelGallery.Controls.Add(lbl2);
        for (int j = 0; j < 4; j++)
        {
	Label lbl3 = new Label();
	Label lbl4 = new Label();
	// Dieses Linkbutton enthält später das anklickbare Bild
	LinkButton lnkBtn = new LinkButton();
	if (intCurrentImageCount < intImageAmount)
	{
                    // So lange noch Bilder vorhanden sind
	    // Tabellenzelle mit Bild erstellen
			
	if (!File.Exists(Server.MapPath("bilder/fotogalerie/" + strControl + "/thumbs/" +
                                                        fileInfo[intCurrentImageCount].Name))) 
	{
                    // Wenn die Thumbnaildatei zum aktuellen Bild nicht existiert
	    // Bitmap Object vom aktuellen Bild ersetlle
	    Bitmap bmp = new Bitmap(Server.MapPath("bilder/fotogalerie/" + strControl 
                                                + "/orginal/" + fileInfo[intCurrentImageCount].Name));	
                    // Thumbnail erstellen
	    SaveJPGWithCompressionSetting(GetThumbnail(bmp), Server.MapPath
                                       ("bilder/fotogalerie/" + strControl + "/thumbs/" + 
                                             fileInfo[intCurrentImageCount].Name), 60, "thumbs");
                    // Bild mit angepasster Größe erstellen
	    SaveJPGWithCompressionSetting(GetFullsizeImage(bmp), Server.MapPath
                                                 ("bilder/fotogalerie/" + strControl + "/normal/" + 
                                                   fileInfo[intCurrentImageCount].Name), 80, "normal");
	}
						
	// Linkbutton mit Bild und Eigenschaften bestücken
	lnkBtn.Text = "<img border='0' src='" + Connection.createEmailUrl() 
                                    + "bilder/fotogalerie/" + strControl + "/thumbs/" + 
                                              fileInfo[intCurrentImageCount].Name + "'>";
						lnkBtn.CommandArgument = "bilder/fotogalerie/" + strControl + "/normal/" +  
                                                                       fileInfo[intCurrentImageCount].Name;
	lnkBtn.CommandName = intCurrentImageCount.ToString();
	lnkBtn.Click += new EventHandler(lnkBtn_Click);
	// Tabellenaufbau Fortsetzung
	lbl3.Text = "<td align='center' width='115' height='110'>";
	lbl3.Text +=	"<table cellpadding='0' cellspacing='0' width='110' 
                                                                                                              border='0'>";
	lbl3.Text +=		"<tr>";
	lbl3.Text +=			"<td height='20' background='" + 
                                      Connection.createEmailUrl() + "bilder/fotogalerie/top.gif'></td>";
	lbl3.Text +=		"</tr>";
	lbl3.Text +=		"<tr>";
	lbl3.Text +=			"<td height='70' background='" + 
                                                     Connection.createEmailUrl() + 
               "bilder/fotogalerie/middle.gif' align='center' valign='top' class='StandardSchrift'>";

	// Tabellenaufbau Fortsetzung
	lbl4.Text =			"</td>";
	lbl4.Text +=		"</tr>";
	lbl4.Text +=		"<tr>";
	lbl4.Text +=			"<td height='11' background='" +
                               Connection.createEmailUrl() + "bilder/fotogalerie/bottom.gif'></td>";
	lbl4.Text +=		"</tr>";
	lbl4.Text +=	"</table>";
	lbl4.Text += "</td>";
        }
        else
        {
	// Wenn keine Bilder mehr vorhanden sind
	// Leere Tabellenzelle ohne Bild erstellen
	// Tabellenaufbau Fortsetzung
	lbl4.Text += "<td width='115' height='90'>&nbsp;";
	lbl4.Text += "</td>";
         }
         thisPanelGallery.Controls.Add(lbl3);
         thisPanelGallery.Controls.Add(lnkBtn);
         thisPanelGallery.Controls.Add(lbl4);

        // Bilderzähler hochzählen
        intCurrentImageCount++;
    }
    // Tabellenaufbau Fortsetzung
    Label lbl5 = new Label();
    lbl5.Text =		"<td width='*'></td>";
    lbl5.Text += "</tr>";
    thisPanelGallery.Controls.Add(lbl5);
    // Wenn keine Bilder mehr vorhanden sind
    // Endlosschleife beenden
    if (intCurrentImageCount > intImageAmount-1)
         break;
    }
    // Tabellenaufbau beenden
    Label lbl6 = new Label();
    lbl6.Text = "</table>";
    thisPanelGallery.Controls.Add(lbl6);
}
Im Grunde nichts anderes als eine dynamische Tabelle.
Wobei man hier System.Drawing.Bitmap auch ohne weiteres durch System.Drawing.Image ersetzen könnte, die sind eh beide nach meinem Wissen gleichwertig.
Hoffe mal, das gibt dir neue Denkanstöße... ;)
(Das ganze ist übrigens für eine ASP.NET - Web-Anwendung und dennoch benutzen wir nicht Ui.WebControls.Image-Objekte)

Gruß, Niko
 
Ja, es geht prinzipiell nicht 2 Drawing.Image Objekte darzustellen. Es geht auch prinzipiell nicht, ein Drawing.Image Objekt darzustellen, wenn das entpsrechende Script auch HTML-Quellcode zurückgibt.
Das ist der unterschied zwischen System.Drawing.Image und Ui.WebControls.Image! Das Webcontrol ist dafür da, den entsprechenen HTML-Quellcode zu generieren, das andere für das Bild ansich, um es zu bearbeiten, evtl. verändert wieder ABZUSPEICHERN, aber eben nicht um es innerhalb dieses Scriptes auszugeben!
 
na also, das is doch die Anwort, die ich mir schon am Anfang erwuenscht habe ich danke recht herzlich. Ich weiss net warum mir das bisher sonst niemand sagen konnte...

@Niko
danke fuer das Script werds mir mal ganz in Ruhe ankucken und schauen was ich davon brauchen kann!
 
Zurück