我有两张图片,其中一张是我用Graphics
创建的(一个简单的圆圈/椭圆)。
现在我想用另一张图片删除圆圈的一部分。它也应该支持删除alpha值。
我希望链接有效,如果没有,请将其写入评论&我会解决它。
感谢您的任何建议
修改
图像2实际上没有任何边框,只是为了显示帧尺寸......
答案 0 :(得分:1)
以下是:
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace WpfApplication4
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var image1 = new BitmapImage(new Uri("1.png", UriKind.Relative));
var image2 = new BitmapImage(new Uri("2.png", UriKind.Relative));
var bitmap1 = BitmapFactory.ConvertToPbgra32Format(image1);
var bitmap2 = BitmapFactory.ConvertToPbgra32Format(image2);
var width = 256;
var height = 256;
var bitmap3 = BitmapFactory.New(width, height);
var transparent = Color.FromArgb(0, 0, 0, 0);
for (var y = 0; y < height; y++)
{
for (var x = 0; x < width; x++)
{
var color1 = bitmap1.GetPixel(x, y);
var color2 = bitmap2.GetPixel(x, y);
Color color3;
if (color1.Equals(transparent))
{
color3 = transparent;
}
else
{
if (color2.Equals(transparent))
{
color3 = color1;
}
else
{
color3 = transparent;
}
}
bitmap3.SetPixel(x, y, color3);
}
}
Image1.Source = bitmap3;
}
}
}
我已经使用https://www.nuget.org/packages/WriteableBitmapEx/来简化操作,小心使用32位PNG以及透明色是什么,因为在WPF中它实际上是透明的白色。
如果你正在使用这个https://msdn.microsoft.com/en-us/library/system.drawing.bitmap%28v=vs.110%29.aspx,你应该可以轻松地将其翻译成表格。
编辑:你可以使用不透明蒙版,但由于pic.2不是它的外部黑暗,它不会有用。答案 1 :(得分:1)
最后,我自己编写了代码。就是这样:
public static Bitmap RemovePart(Bitmap source, Bitmap toRemove)
{
Color c1, c2, c3;
c3 = Color.FromArgb(0, 0, 0, 0);
for (int x = 0; x < source.Width; x++)
{
for (int y = 0; y < source.Height; y++)
{
c1 = source.GetPixel(x, y);
c2 = toRemove.GetPixel(x, y);
if (c2 != c3)
{
source.SetPixel(x, y, Color.FromArgb(c2.A, c1));
}
}
}
}