Domanda

Sto cercando di creare una pagina che mi permetta di acquisire un'immagine di input e generare una maschera da essa. L'input sarebbe un PNG indicizzato con uno sfondo trasparente. L'immagine risultante sarebbe nera dove l'originale era trasparente e trasparente ovunque l'immagine originale fosse opaca.

Ho fatto alcune manipolazioni di base delle immagini in asp.net ma non sono sicuro di come procedere. Spero che ci sia qualche soluzione più veloce di andare pixel per pixel.

Se qualcuno può indicarmi la giusta direzione, lo apprezzerei davvero.

È stato utile?

Soluzione

Altri suggerimenti

Ok, ho una soluzione funzionante che utilizza le trasformazioni. Ad essere sinceri, non capisco al 100% cosa sto facendo con le matrici di colori, quindi il modo in cui l'ho fatto potrebbe non essere ottimale. Codice incollato di seguito nel caso in cui qualcun altro incontri lo stesso problema.

Fondamentalmente la trasformazione rende neri i pixel trasparenti e bianchi i pixel colorati. Ho quindi usato MakeTransparent sui pixel bianchi. Dovrebbe esserci un modo per farlo in un solo passaggio, ma sfortunatamente oggi è oltre me.

Grazie ancora chris- stavo cercando da ore ore per trovare una tecnica che avrebbe funzionato e non avevo trovato nulla su questo tipo di trasformazione.

<%@ 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top