C# 如何使用其他图像删除图像的一部分
我有两个图像,其中一个我将使用C# 如何使用其他图像删除图像的一部分,c#,image,graphics,bitmap,C#,Image,Graphics,Bitmap,我有两个图像,其中一个我将使用图形(一个简单的圆/椭圆)创建 现在,我想用另一幅图像删除圆的一部分。它还应该支持删除alpha值 我希望这个链接能起作用,如果不行,请把它写进评论里&我会修正它的 谢谢你的建议 编辑: 图2实际上没有任何边框,它只是显示帧大小…以下操作即可: using System; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; namespace
图形(一个简单的圆/椭圆)创建
现在,我想用另一幅图像删除圆的一部分。它还应该支持删除alpha值
我希望这个链接能起作用,如果不行,请把它写进评论里&我会修正它的
谢谢你的建议
编辑:
图2实际上没有任何边框,它只是显示帧大小…以下操作即可:
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;
}
}
}
使用系统;
使用System.Windows;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
命名空间WpfApplication4
{
///
///MainWindow.xaml的交互逻辑
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
加载+=主窗口\u加载;
}
已加载私有void主窗口(对象发送器、路由目标)
{
var image1=新的位图图像(新的Uri(“1.png”,UriKind.Relative));
var image2=新的位图图像(新的Uri(“2.png”,UriKind.Relative));
var bitmap1=BitmapFactory.convertTopBGRA32格式(image1);
var bitmap2=BitmapFactory.convertTopBGRA32格式(image2);
变量宽度=256;
变量高度=256;
var bitmap3=BitmapFactory.New(宽度、高度);
var transparent=Color.FromArgb(0,0,0,0);
对于(变量y=0;y
我曾经让事情变得更简单,请注意使用32位PNG以及什么是透明颜色,因为在WPF中,它实际上是一种透明的白色
如果这是您正在使用的,那么您应该能够轻松地将其转换为表单
编辑:你可以使用不透明度遮罩,但由于pic.2的外部不暗,所以它不会工作。最后,我自己编写了代码。就是这样:
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));
}
}
}
}
公共静态位图删除部分(位图源、位图删除)
{
颜色c1、c2、c3;
c3=颜色。来自argb(0,0,0,0);
for(int x=0;x
@Aybe,谢谢你给这张照片添加了表情,我的名声还不够好:你敢使用表单或WPF吗?不,我正在使用winforms,但你的代码帮助我解决了问题。非常感谢:D