Laden...

Bilder dynamisch generieren (ASP.NET)

Erstellt von sbertl000 vor 17 Jahren Letzter Beitrag vor 17 Jahren 5.250 Views
sbertl000 Themenstarter:in
822 Beiträge seit 2005
vor 17 Jahren
Bilder dynamisch generieren (ASP.NET)

Hallo, ich generiere ein Bild für einen Sicherheitscheck dynamisch, nur wie bekomme ich das in ein Image, ich meine das Steuerelement, so generiere ich mein Bild:

Bitmap b = new Bitmap(100, 50);
        Graphics g = Graphics.FromImage(b);
        Font f = new Font("Arial", FontStyle.Strikeout);
        SolidBrush brush = new SolidBrush(Color.Black);

        g.DrawString("H452FS", f, brush, new PointF(2, 2));

Mein Image heißt image_sicherheitscode

Danke schon im Voraus

sbertl

184 Beiträge seit 2005
vor 17 Jahren

Meines Wissens kannst du nicht "direkt" in ein ImageControl rein zeichnen. Du musst dem Image Control als Source eine aspx datei angeben, die keinen asp/html code enthält und in der codebehind datei den ResponseContent auf "image/jpeg" oder eben dein gewünschtes Ausgabeformat, setzt.
Dann kannst du über b.Save(Response.ContentStream, ImageFormat.Jpeg) das Bild in der aspx datei "ausgeben".

Also zusammengefasst:

Du hast eine Default.aspx, in der das dynamische Bild angezeigt werden soll. Als Source gibst du eine Datei, beispielsweise Viewport.aspx, an. In Viewport.aspx.cs erstellst du das eigentliche Bild und gibst es über den ResponseContent / ContentStream aus.
Somit wird die Viewport.aspx zum "Platzhalter" für dein dynamisch generiertes Bild!

Gruß,
DCoder

sbertl000 Themenstarter:in
822 Beiträge seit 2005
vor 17 Jahren

Ok, hab das soweit mal so gemacht, nur:

  1. Die image_sicherheitscode.ImageUrl Eigenschaft nimmt einen string, soll ich da einfach die aspx Seite angeben

  2. Wie "leer" muss die eine Seite sein? Komplett? oder zumindest das Anfangstag:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="sicherheitscode.aspx.cs" Inherits="sicherheitscode" %>

sbertl

//Edit: Habs gelößt, hab mich nur vertippt beim Seitennamen 😁 😁

121 Beiträge seit 2006
vor 17 Jahren

Hallo sbertl000,
so kannst Du die Grafik erzeugen. Die ASP-Seite an sich wird dann nicht gerendert, d.h. die Controls in der Seite spielen keine Rolle mehr. Output der Seite ist nur das Mime-Grafik-Objekt.


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

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

public partial class Test_Dynamische_Grafik : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Bitmap b = new Bitmap(300, 300);

        Graphics g = Graphics.FromImage(b);
        g.FillRectangle(Brushes.SkyBlue, 25, 25, 250, 250);
        Font f = new Font("Arial", 40, FontStyle.Underline);
        SolidBrush brush = new SolidBrush(Color.Blue);
        g.DrawString("Test", f, brush, new PointF(55, 55));

        b.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
    }
}


Gruß Hape

121 Beiträge seit 2006
vor 17 Jahren

Wie überträgt man am besten Parameter an das Bild (Eigenschaften z.B. die das Bild verändert erscheinen lassen)? Wenn die Parameter nicht an die URL gehängt werden sollen (klassisch), muss man dann über die Session gehen? Oder gibts noch andere Möglichkeiten? Letzteres würde mich interessieren.
Gruß Hape

1.130 Beiträge seit 2005
vor 17 Jahren

Außer per GET/POST oder Sessions gibt es nicht viele Möglichkeiten Infos an eine andere Seite zu übergeben. Grade in diesem Fall bietet sich GET an.

2.082 Beiträge seit 2005
vor 17 Jahren

Ich greif das Thema nochmal auf, da ich momentan am selben Problem hänge.

Ich dachte mir das Bitmap einfach in ein File zu speichern und die dann als ImageUrl angeben aber falsch gedacht...

Ich hab jetzt soweit den Response.OutputStream drin, interessieren würde mich jedoch, wo das Bild dann eigentlich hingeschrieben wird bzw. wie kann ich sagen, der OutputStream ist die datei X?

Danke.

//Edit: oO ich verstehe... Es schreibt mein Bild direkt und gibt mir dieses aus... Lässt sich das nicht anders lösen? Ich wollte das Bild eigentlich unterhalb meiner TextBox anzeigen, wenn das mir allerdings die ganze Seite löscht, nützt es mir wenig.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
das Bild müsste dann eine eigene aspx-Datei bekommen, die Du als Quelle des Bildes angibst.
Eigentlich nimmt man für so was aber keine Page, sondern einen IHttpHandler (.ashx-Datei), der Code der dann in ProcessRequest steht ist allerdings genau der gleiche wie von hape beschrieben.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

2.082 Beiträge seit 2005
vor 17 Jahren

Wunderbar danke, ich habs endlich begriffen und es klappt.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

1.274 Beiträge seit 2005
vor 17 Jahren

Tut mir leid das ich diesen Thread nochmal aufwärme, kann man kein Post auf der Handler Datei machen?

Liebe Grüße
LastGentleman

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein