2009-05-01 7 views
1

Ich versuche, eine Seite zu erstellen, die mir erlauben, ein Eingangsbild zu nehmen und eine Maske von ihm zu erzeugen. Die Eingabe wäre eine indizierte PNG mit transparentem Hintergrund. Das resultierende Bild wäre schwarz, wo das Original überall transparent und transparent wäre, wenn das Originalbild opak wäre.Invertierung Bildtransparenz in ASP.net

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 gibt, die schneller ist als Pixel für Pixel.

Wenn jemand kann mich in der richtigen Richtung ich es wirklich schätzen würde.

Antwort

0

Ok Ich habe eine funktionierende Lösung Transformationen. Um ganz ehrlich zu sein, ich verstehe nicht 100%, was ich mit den Farbmatrizen mache - die Art und Weise, wie ich das gemacht habe, ist vielleicht nicht optimal. Der unten eingefügte Code für den Fall, dass jemand anderes zum selben Problem kommt.

Grundsätzlich macht die Transformation die transparenten Pixel schwarz und die farbigen Pixel weiß. Ich habe dann MakeTransparent auf die weißen Pixel angewendet. Es sollte einen Weg geben, dies in einem einzigen Schritt zu tun, aber es ist heute jenseits von mir

Danke wieder chris- Ich hatte stundenlang gesucht, um eine Technik zu finden, die funktionieren würde, und ich hatte nichts darüber herausgefunden Art der Transformation.

<%@ 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>