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
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
Ok, hab das soweit mal so gemacht, nur:
Die image_sicherheitscode.ImageUrl Eigenschaft nimmt einen string, soll ich da einfach die aspx Seite angeben
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 😁 😁
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
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
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.
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
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
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
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