Question

J'essaie de créer une page qui me permettra de prendre une image d'entrée et d'en générer un masque. L'entrée serait un fichier PNG indexé avec un arrière-plan transparent. L'image résultante serait en noir lorsque l'original était transparent et transparent partout où l'image d'origine était opaque.

J'ai manipulé des images très basiques sur asp.net, mais je ne sais pas comment procéder. J'espère qu'il existe une solution plus rapide que d'aller pixel par pixel.

Si quelqu'un peut me diriger dans la bonne direction, je l'apprécierais vraiment.

Était-ce utile?

La solution

Vous devriez probablement vous pencher sur les transformations.

http://en.csharp-online.net/GDIplus_Graphics_Transformation%E2 % 80% 94Image_Transformation

Autres conseils

Ok, j'ai une solution de travail utilisant des transformations. Pour être tout à fait honnête, je ne comprends pas à 100% ce que je fais avec les matrices de couleurs. La façon dont j'ai fait cela pourrait donc être moins qu'optimale. Code collé ci-dessous au cas où quelqu'un d'autre rencontrerait le même problème.

En gros, la transformation rend les pixels transparents noirs et les pixels colorés blancs. J'ai ensuite utilisé MakeTransparent sur les pixels blancs. Il devrait y avoir un moyen de faire cela en une seule étape, mais malheureusement, cela m’est dépassé aujourd’hui

Merci encore, chris. Je cherchais depuis des heures une technique qui fonctionnerait et je n’avais rien vu de tel sur ce type de 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top