Инвертирование прозрачности изображения в ASP.net

StackOverflow https://stackoverflow.com/questions/809856

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать страницу, которая позволит мне взять входное изображение и создать из него маску.Входными данными будет индексированный PNG с прозрачным фоном.Результирующее изображение будет черным там, где исходное изображение было прозрачным, и прозрачным там, где исходное изображение было непрозрачным.

Я проделал некоторые базовые манипуляции с изображениями в asp.net, но не знаю, как действовать.Я надеюсь, что есть какое-то решение быстрее, чем идти попиксельно.

Если кто-нибудь может указать мне правильное направление, я был бы очень признателен.

Это было полезно?

Решение

Вероятно, вам следует изучить трансформации.

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

Другие советы

Хорошо, у меня есть рабочее решение с использованием преобразований.Честно говоря, я не на 100% понимаю, что делаю с цветовыми матрицами, поэтому способ, которым я это сделал, может быть неоптимальным.Код, вставленный ниже, на случай, если кто-то еще столкнется с той же проблемой.

По сути, преобразование делает прозрачные пиксели черными, а цветные — белыми.Затем я использовал MakeTransparent для белых пикселей.Должен быть способ сделать это за один шаг, но сегодня, к сожалению, это мне не под силу.

Еще раз спасибо, Крис. Я часами искал метод, который бы работал, и ничего не нашел по этому типу трансформации.

<%@ 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top