none
Umsetzung matlab in asp.net RRS feed

  • Frage

  • Hallo,

    Ich bin gerade dabei ein matlab Programm in asp.net umzusetzen. Es gibt zwar ein matlab Compiler dieser ist aber extrem teuer und fällt deswegen aus. (falls jemand eine andere direkte Idee hat immer gerne).
    Nun aber zu meiner Frage. Gibt es ein Art übersetzungstool das den Matlab Code direkt in C# oder VB Code umcodiert?
    In dem Programm werden am Ende Graphiken bzw. Rechtecke ausgegeben. Wie kann ich das programmatisch umsetzen. In einer Windwos Anwendung wäre das kein Problem aber als Webanwendung???

    Vielen Dank
    Mittwoch, 3. März 2010 21:56

Antworten

  • Hi,
    Ich will einfach nur auf Knopfdruck ein Rechteck zeichnen.... hätten Sie vielleicht für diesen Fall ein Beispielcode. Irgendein Schritt fehlt mir.
    HTML Kenntnisse brauchst Du natürlich, wenn Du eine Webanwendung schreiben willst.

    Eine Grafik in liegt immer in einer externen Resource, direktes Zeichnen in das Control bzw. auf die Oberfläche wie in WinForms ist nicht möglich (außer mit was clientseitigem, das ist aber ein komplett anderes Thema).

    Als Beispiel:

    <html>
    <body>
        <div>Text</div>
        <img src="Images/Bild1.jpg" />
    </body>
    </html>
    
    Anstelle einer Grafikdatei kann man bspw. auch einen Handler (ASHX) angeben, der das Bild erzeugt.

    <html>
    <body>
        <div>Text</div>
        <img src="Handler/CreateImage.ashx?Width=400&Height=200" />
    </body>
    </html>
    

    In dem Fall sieht der Handler bspw. so aus:

    <%@ WebHandler Language="VB" Class="CreateImage" %>
    
    Imports System
    Imports System.Web
    Imports System.Drawing
    Imports System.Drawing.Imaging 
    Imports System.Drawing.Drawing2D
    
    Public Class CreateImage : Implements IHttpHandler
        
    Public Sub ProcessRequest(ByVal ctx As HttpContext) Implements IHttpHandler.ProcessRequest 
    
    Dim Width   As Int32
    Dim Height  As Int32
    
        Int32.TryParse( ctx.Request.QueryString( "Width" ),  Width )
        Int32.TryParse( ctx.Request.QueryString( "Height" ), Height )
    
    Dim Output  As Bitmap   = New Bitmap( Width + 50, Height + 30, PixelFormat.Format24bppRgb ) 
    Dim Graphic As Graphics = Graphics.FromImage( Output ) 
    
        ctx.Response.Clear 
        ctx.Response.ContentType = "image/gif" 
        ctx.Response.AddHeader("Content-Disposition","inline;filename=test.gif") 
    
        Graphic.FillRectangle( Brushes.White, 0, 0, Width + 50, Height + 30 )
        Graphic.DrawRectangle( Pens.Black, 25, 15, Width, Height )
    
        Output.Save( ctx.Response.outputstream, ImageFormat.Gif )
    
        Graphic.dispose() 
        Output.dispose() 
    
        ctx.Response.End 
    
    End Sub 
     
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
    
    End Class

    Ist natürlich nur ein Beispiel, weder optimiert noch auf ggfs. auftretende Probleme überprüft, ..., läuft aber und zeigt, wie es vom Grundsatz her geht.

    Den Handler als CreateImage.ashx im Projekt speichern.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 4. März 2010 17:10
    Moderator

Alle Antworten

  • Hi,
    Nun aber zu meiner Frage. Gibt es ein Art übersetzungstool das den Matlab Code direkt in C# oder VB Code umcodiert?
    In dem Programm werden am Ende Graphiken bzw. Rechtecke ausgegeben. Wie kann ich das programmatisch umsetzen. In einer Windwos Anwendung wäre das kein Problem aber als Webanwendung???
    wenn das in einer Windows Anwendung kein Problem wäre, warum dann in einer Webanwendung? Der Code für die Erzeugung der Grafiken ist identisch. Lagere das in eine DLL aus, die kannst Du dann von Windows- und Webanwendungen heraus verwenden.

    Ob es ein Übersetzungstool gibt, kann ich dir nicht sagen. Fraglich wäre halt, ob der überhaupt ohne Matlab funktionieren kann (das wäre ja wohl dein Ziel, oder?)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 4. März 2010 07:33
    Moderator
  • Hallo ,

    Erstmal danke für die schnelle Antwort.
    Ich müsste einfach Vierecke anhand x und y Position zeichnen lassen. Dies wollte ich mit dem eventpaint args oder so ähnlich :) , machen den verweis gibt es aber nur unter systems.windwos.... etc. und ich konnte nicht drauf zugreifen. Wie geht man dabei vor? Oder gibt es vielleicht sogar ein Code Beispiel ?

    Vielen Dank
    Donnerstag, 4. März 2010 11:25
  • Donnerstag, 4. März 2010 11:43
  • Hi,
    Ich müsste einfach Vierecke anhand x und y Position zeichnen lassen. Dies wollte ich mit dem eventpaint args oder so ähnlich :) , machen den verweis gibt es aber nur unter systems.windwos.... etc. und ich konnte nicht drauf zugreifen. Wie geht man dabei vor? Oder gibt es vielleicht sogar ein Code Beispiel ?
    dann wären der Namespace System.Drawing bzw. die dort enthaltenen Klassen und Strukturen, bspw. Rectangle deine Freunde.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 4. März 2010 11:45
    Moderator
  • Hallo,

    Nach stundenlangem ausprobieren bin ich übel gescheitert.
    Ich will einfach nur auf Knopfdruck ein Rechteck zeichnen.... hätten Sie vielleicht für diesen Fall ein Beispielcode. Irgendein Schritt fehlt mir.
    Hier mein "Code" :)

    Imports System.Drawing
    
    Partial Public Class _Default
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        End Sub
    
        Protected Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click
    
    
            Dim gg As Graphics
            Dim rechteck1 As Rectangle = New Rectangle(10, 10, 100, 100)
            Dim Pen As Pen = New Pen(Color.AliceBlue)
            gg.DrawRectangle(Pen, rechteck1)
    
        End Sub
    End Class
    Schon mal vielen Dank!!!
    Donnerstag, 4. März 2010 16:50
  • Hi,
    Ich will einfach nur auf Knopfdruck ein Rechteck zeichnen.... hätten Sie vielleicht für diesen Fall ein Beispielcode. Irgendein Schritt fehlt mir.
    HTML Kenntnisse brauchst Du natürlich, wenn Du eine Webanwendung schreiben willst.

    Eine Grafik in liegt immer in einer externen Resource, direktes Zeichnen in das Control bzw. auf die Oberfläche wie in WinForms ist nicht möglich (außer mit was clientseitigem, das ist aber ein komplett anderes Thema).

    Als Beispiel:

    <html>
    <body>
        <div>Text</div>
        <img src="Images/Bild1.jpg" />
    </body>
    </html>
    
    Anstelle einer Grafikdatei kann man bspw. auch einen Handler (ASHX) angeben, der das Bild erzeugt.

    <html>
    <body>
        <div>Text</div>
        <img src="Handler/CreateImage.ashx?Width=400&Height=200" />
    </body>
    </html>
    

    In dem Fall sieht der Handler bspw. so aus:

    <%@ WebHandler Language="VB" Class="CreateImage" %>
    
    Imports System
    Imports System.Web
    Imports System.Drawing
    Imports System.Drawing.Imaging 
    Imports System.Drawing.Drawing2D
    
    Public Class CreateImage : Implements IHttpHandler
        
    Public Sub ProcessRequest(ByVal ctx As HttpContext) Implements IHttpHandler.ProcessRequest 
    
    Dim Width   As Int32
    Dim Height  As Int32
    
        Int32.TryParse( ctx.Request.QueryString( "Width" ),  Width )
        Int32.TryParse( ctx.Request.QueryString( "Height" ), Height )
    
    Dim Output  As Bitmap   = New Bitmap( Width + 50, Height + 30, PixelFormat.Format24bppRgb ) 
    Dim Graphic As Graphics = Graphics.FromImage( Output ) 
    
        ctx.Response.Clear 
        ctx.Response.ContentType = "image/gif" 
        ctx.Response.AddHeader("Content-Disposition","inline;filename=test.gif") 
    
        Graphic.FillRectangle( Brushes.White, 0, 0, Width + 50, Height + 30 )
        Graphic.DrawRectangle( Pens.Black, 25, 15, Width, Height )
    
        Output.Save( ctx.Response.outputstream, ImageFormat.Gif )
    
        Graphic.dispose() 
        Output.dispose() 
    
        ctx.Response.End 
    
    End Sub 
     
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
    
    End Class

    Ist natürlich nur ein Beispiel, weder optimiert noch auf ggfs. auftretende Probleme überprüft, ..., läuft aber und zeigt, wie es vom Grundsatz her geht.

    Den Handler als CreateImage.ashx im Projekt speichern.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 4. März 2010 17:10
    Moderator
  • Schon mal vielen vielen dank,

    Ich würde um erhlich zu sein lieber den einfachen weg ohne Handler gehen.

    Wenn ich es richtig verstanden habe, muss zuerst ein Bild erstellt werden, in dieses können dann verschiedene Formen eingefügt werden.

    Aber soweit komm ich gar nicht, es wird nichtmal ein ganz normales Bild angezeigt. Hab alle Ordner in der asp.net Einstellung freigegeben FF und IE probiert. Es ist unglaublich...
    Donnerstag, 4. März 2010 17:41
  • Hi,
    Ich würde um erhlich zu sein lieber den einfachen weg ohne Handler gehen.
    das ist der einfache Weg. Einen anderen gibt es nicht (naja, ok, es gibt immer einen Weg aber einen einfacheren eher nicht :). Du kannst in einer Webform kein Bild zeichnen und das dann in die Webform malen. Entweder gibst Du ein Bild aus oder HTML oder was anderes. Mischformen gibts da nicht. Du bewegst dich halt in einer Webanwendung, da ist vieles komplett anders als in Offlineapplikationen.
    Wenn ich es richtig verstanden habe, muss zuerst ein Bild erstellt werden, in dieses können dann verschiedene Formen eingefügt werden.

    Aber soweit komm ich gar nicht, es wird nichtmal ein ganz normales Bild angezeigt. Hab alle Ordner in der asp.net Einstellung freigegeben FF und IE probiert. Es ist unglaublich...
    Nimm doch bitte mal genau das, was ich gepostet habe und bau das in ein Testprojekt ein. Pfade, ... müssen natürlich alle stimmen. Um das zu prüfen, kannst Du http://deinserver/pfad/Handler/CreateImage.ashx?Width=400&Height=200 mal direkt im Browser aufrufen.

    Ich hab dir das mal als Beispiel online gestellt.

      http://testaccount.sfwnet2.de/CreateImage/

    Das ganze als Download:

      http://testaccount.sfwnet2.de/CreateImage/CreateImage.zip

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 4. März 2010 17:49
    Moderator
  • Hallo,

    Hab ich genauso ausprobiert. Es kommt nur ein Platzhalter für das Bild.
    Aber um das überhaupt zu erreichen musste ich erst den Teil

    '<%@ WebHandler Language="VB" Class="CreateImage" %>

    auskommentieren weil er ein ungültiges Zeichen angemeckert hat.

    Wenn ich den Handler direkt einegbe kommt ein 404 Fehler:

    Serverfehler in der Anwendung /.
    --------------------------------------------------------------------------------
    
    Die Ressource kann nicht gefunden werden. 
    Beschreibung: HTTP 404. Die gesuchte Ressource oder eine ihrer Abhängigkeiten wurde möglicherweise entfernt, umbenannt oder ist vorübergehend nicht verfügbar. Überprüfen Sie folgenden URL, und stellen Sie sicher, dass er richtig geschrieben wurde. 
    
    Angeforderter URL: /Handler/CreateImage.ashx
    
    
    --------------------------------------------------------------------------------
    Versionsinformationen: Microsoft .NET Framework-Version:2.0.50727.4927; ASP.NET-Version:2.0.50727.4927 
    Und wie schon geschrieben, es werden nicht mal normal eingefügte .html Bilder angezeigt. Stimmt da was mit IIS nicht??

    Donnerstag, 4. März 2010 18:28
  • Hi,
    Aber um das überhaupt zu erreichen musste ich erst den Teil

    '<%@ WebHandler Language="VB" Class="CreateImage" %>

    auskommentieren weil er ein ungültiges Zeichen angemeckert hat.
    Öhm. Da ist eher dein Server kaputt bzw. ASP.NET gar nicht erst aktiviert.

    Unter IIS 6 muss man ASP.NET noch explizit in der IIS MMC aktivieren.

    IIS MMC
     -> Webdiensterweiterungen
       -> ASP.NET 2.0.50727
         -> Erlauben

    Unter IIS 7 muss ASP.NET bei der Installation mit angewählt werden (defaultmäßig ist es das nicht). Man kann ASP.NET auch nachinstallieren, wenns nicht vorhanden ist.
    Und wie schon geschrieben, es werden nicht mal normal eingefügte .html Bilder angezeigt. Stimmt da was mit IIS nicht??
    Also bspw. auch kein bild.jpg? Das wäre ziemlich komisch. Bei ASP.NET ists klar, wenn es nicht installiert bzw. erlaubt ist. Dann sendet IIS einen 404 Fehler. Aber Bilder sind eigentlich immer verfügbar. In dem Fall fehlt evtl. der Mimetype (auch einzutragen über die IIS MMC) aber das wäre hier doch arg verwunderlich.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 4. März 2010 18:38
    Moderator
  • Hallo,

    Ich werf jetzt mal alle .net Sachen runter und setz neu auf.
    Ich werd dann berichten :)

    Übrigens habe ich es vorhin geschafft zumindest ein kleines Quadrat anzuzeigen, ich habe den Handler direkt reingezogen und so einen Link gesetzt danach noch die width und heigt Wert auf einen absoluten Wert gesetzt dann hats funktioniert... alles sehr verwirrend...

    Donnerstag, 4. März 2010 19:47
  • UPDATE:

    Es ist geschafft!!!!
    Vielen vielen dank!!!

    Ich Idiot hatte den Handler nicht in den Ordner handler geschoben, somit hat er den Handler natürlich nicht gefunden....
    Das Tag ganz oben <%@ .... > hab ich einfach weggelassen geht auch ohne. Graphiken werden auch wieder angezeigt. (warum auch immer).

    Nochmal vielen dank für die Hilfe!!!!
    Donnerstag, 4. März 2010 20:38
  • Hi,
    Es ist geschafft!!!!
    Vielen vielen dank!!!
    das freut mich :)
    Das Tag ganz oben <%@ .... > hab ich einfach weggelassen geht auch ohne. Graphiken werden auch wieder angezeigt. (warum auch immer).
    Hmmm. Wundert mich. Das sollte eigentlich nicht gehen. Aber Ok, lassen wirs mal so :)

    Wenn Du noch die Postings, die für dich hier im Thread am hilfreichsten waren, als Antwort markieren könntest, wär das prima :)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Donnerstag, 4. März 2010 21:49
    Moderator