首页 > 解决方案 > c#/vb.net 结合透明边框的图片

问题描述

我想结合两张图片,这里是一个例子。

我有卡车的图像和铅笔的图像,我想将它们组合起来,如底行所示,使用 gimp 创建,使用 alpha 中的选择、展开和清除。

在此处输入图像描述

实际上代码是最小的:

Dim base = Image.FromFile("small_truck.png")
Dim add As Bitmap = Bitmap.FromFile("pencil.png")
Dim frame As New Bitmap(base.Width, base.Height, Imaging.PixelFormat.Format32bppArgb)
Dim g = Graphics.FromImage(frame)
g.DrawImage(base, 0, 0)
g.DrawImage(add, base.Width - add.Width, base.Height - add.Height, add.Width, add.Height)
frame.Save("output.png")

有人知道如何复制 gimp 工作流程吗?

标签: .netgraphics

解决方案


我做的!

Dim base = Image.FromFile("small_truck.png")
Dim add As Bitmap = Bitmap.FromFile("pencil.png")
Dim frame As New Bitmap(base.Width, base.Height, Imaging.PixelFormat.Format32bppArgb)
Dim g = Graphics.FromImage(frame)
g.DrawImage(base, 0, 0)
g.CompositingMode = CompositingMode.SourceCopy
Dim startx = base.Width - add.Width, starty = base.Height - add.Height
For y = 0 To add.Height - 1
    For x = 0 To add.Width - 1
        Dim c = add.GetPixel(x, y)
        If c.A >= 128 Then
            g.FillRectangle(Brushes.Transparent, startx + x - 1, starty + y - 1, 3, 3)
        End If
    Next
Next
g.CompositingMode = CompositingMode.SourceOver
g.DrawImage(add, startx, starty, add.Width, add.Height)
frame.Save("output_32.png")

我在这里保留问答,也许它对某人有用。


推荐阅读