Pergunta

Eu estou tentando construir uma página que permita-me a tomar uma imagem de entrada e gerar uma máscara dele. A entrada seria um PNG indexado com um fundo transparente. A imagem resultante seria ser preto onde o original foi transparente e transparente onde a imagem original era opaco.

Já fiz alguns manipulação de imagem muito básico em asp.net mas não estou certo de como proceder. Eu estou esperando que haja alguma solução mais rápida do que ir pixel por pixel.

Se alguém pode me apontar na direção certa eu realmente aprecio isso.

Foi útil?

Solução

Outras dicas

Ok eu tenho uma solução de trabalho usando transformações. Para ser perfeitamente honesto eu não 100% entender o que eu estou fazendo com as matrizes de cores - assim que a maneira que eu fiz isso pode ser inferior a ideal. Código colado abaixo no caso de alguém corre para o mesmo problema.

Basicamente, a transformação faz com que os pixels transparentes preto e os pixels coloridos branco. Então, usei MakeTransparent sobre os pixels brancos. Deve haver uma maneira de fazer isso em uma única etapa, mas é além de mim hoje, infelizmente

Obrigado novamente Chris- Eu estava procurando por horas para encontrar uma técnica que iria trabalhar e eu não tinha encontrado qualquer coisa sobre este tipo de transformação.

<%@ 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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top