.net - 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 工作流程吗?
解决方案
我做的!
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")
我在这里保留问答,也许它对某人有用。
推荐阅读
- python - 熊猫数据框明确找到NaN
- docker - Docker Container 中的 Vagrant 不起作用(尝试 lint Vagrantfiles)
- flutter - 如何在颤动的底部导航栏中垂直和水平地在中心添加一个按钮?
- windows - 在不超额订阅视频内存时,如何防止 SwapBuffers 被 Windows VidMm Eviction Paging 延迟?
- youtube-api - Youtube V3 数据 API - Channels.list 函数未获取所有频道
- json - 嵌套字典和列表/glom lib python
- gdb - 你能更新 MinGW 的独立组件吗?
- python - 逻辑运算符 Python
- c++ - linux/elf.h、elf.h 和 sys/elf.h 之间的区别以及我应该使用哪一个
- linear-regression - 训练卷积神经网络来预测掩码和边界框