Frage

Ich versuche, eine Seite zu erstellen, die mir erlauben, ein Eingangsbild zu nehmen und eine Maske von ihm zu erzeugen. Der Eingang würde ein indiziertes PNG mit transparentem Hintergrund sein. Das sich ergebende Bild würde schwarz sein, wo das Original war durchsichtig und transparent, wo immer das Originalbild opak war.

Ich habe einige sehr grundlegende Bildmanipulation in asp.net getan, aber ich bin nicht sicher, wie es weitergeht. Ich hoffe, dass es eine Lösung ist schneller als für Pixel gehen Pixel.

Wenn jemand mich in die richtige Richtung zeigen kann, würde ich es wirklich schätzen.

War es hilfreich?

Lösung

Andere Tipps

Ok Ich habe eine Arbeitslösung unter Verwendung von Transformationen. Um ehrlich zu sein ich nicht 100% verstehen, was ich mit den Farbmatrizen tun - so wie ich dies tat kann weniger als optimal. Code unten falls jemand eingefügt läuft sonst in das gleiche Problem.

Im Grunde macht die Transformation der transparenten Pixel schwarz und das farbige Pixel wissen. Ich habe dann verwendet MakeTransparent auf den weißen Pixeln. Es soll eine Möglichkeit, dies in einem einzigen Schritt zu tun, aber es ist heute über mich leider

Danke nochmal Chris- Ich hatte die Suche nach Stunden, eine Technik zu finden, die funktionieren würde, und ich habe über etwas auf diese Art von Transformation nicht kommen.

<%@ page language="vb" contenttype="image/png" %>

<%@ Import Namespace="System.IO" %>
<%@ import namespace="system.drawing" %>
<%@ import namespace="system.drawing.imaging" %>
<%@ import namespace="system.drawing.drawing2d" %>

<script runat="server">
    Sub Page_Load()
        Dim tmpImage As Bitmap = Bitmap.FromFile(Server.MapPath("test.png"))
        Dim input As Bitmap = New Bitmap(tmpImage.Width, tmpImage.Height, PixelFormat.Format32bppArgb)


        Dim trans As New ColorMatrix(New Single()() _
                       {New Single() {0, 1, 1, 1, 0}, _
                        New Single() {1, 0, 1, 1, 0}, _
                        New Single() {1, 1, 0, 1, 0}, _
                        New Single() {1, 1, 1, 1, 0}, _
                        New Single() {0, 0, 0,255, 1}})


        Dim attr As New ImageAttributes
        Dim rc As New Rectangle(0, 0, input.Width, input.Height)
        Dim out As New memorystream
        Dim g As Graphics = Graphics.FromImage(input)
        g.Clear(Color.Transparent)

        attr.SetColorMatrix(trans, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap)      
        g.DrawImage(tmpImage, rc, 0, 0, input.Width, input.Height, GraphicsUnit.Pixel, attr)
        input.makeTransparent(System.Drawing.Color.White)
        input.Save(out, ImageFormat.Png)
        g.Dispose()
        input.Dispose()
        tmpImage.Dispose()
        out.WriteTo(Response.OutputStream)
    End Sub

</script>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top