Invertendo Transparência da imagem em ASP.net
-
03-07-2019 - |
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.
Solução
Você provavelmente deve olhar para transformações.
http://en.csharp-online.net/GDIplus_Graphics_Transformation%E2 % 80% 94Image_Transformation
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>