Invertierung Bildtransparenz in ASP.net
-
03-07-2019 - |
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.
Lösung
Sie sollten wahrscheinlich in Transformationen aussehen.
http://en.csharp-online.net/GDIplus_Graphics_Transformation%E2 % 80% 94Image_Transformation
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>