gpt4 book ai didi

c# - 比较两个位图图像以检查它们在 WPF 中是否不同的最快方法

转载 作者:太空狗 更新时间:2023-10-30 00:19:56 25 4
gpt4 key购买 nike

比较 2 个 BitmapImage 对象的最快方法是什么。一个在图像源属性中,另一个我在代码中创建。

我可以用新的位图图像设置图像源,但它会导致闪烁,因为它会一遍又一遍地设置相同的图像。

我只想在图像像素与 Image.Source 中的像素不同时设置图像。

编辑:

AlbumArt 是 View 中的图像(遵循 MVVM)。

一些代码(在 View 代码隐藏中运行):

Task.Factory.StartNew(() =>
{
while (((App)Application.Current).Running)
{
Thread.Sleep(1000);

Application.Current.Dispatcher.Invoke(new Action(() =>
{
if ((this.DataContext as AudioViewModel).CurrentDevice != null)
{
if ((((this.DataContext as AudioViewModel).CurrentDevice) as AUDIO).SupportsAlbumArt)
{
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri((((this.DataContext as AudioViewModel).CurrentDevice) as AUDIO).AlbumArt);
image.CacheOption = BitmapCacheOption.None;
image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
image.EndInit();

AlbumArt.Source = image;
...

最佳答案

您可以比较BitmapImage 的字节来检查它们是否相等

类似于:

public static class BitmapImageExtensions
{
public static bool IsEqual(this BitmapImage image1, BitmapImage image2)
{
if (image1 == null || image2 == null)
{
return false;
}
return image1.ToBytes().SequenceEqual(image2.ToBytes());
}

public static byte[] ToBytes(this BitmapImage image)
{
byte[] data = new byte[] { };
if (image != null)
{
try
{
var encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(image));
using (MemoryStream ms = new MemoryStream())
{
encoder.Save(ms);
data = ms.ToArray();
}
return data;
}
catch (Exception ex)
{
}
}
return data;
}
}

用法:

BitmapImage image1 = ..............
BitmapImage image2 = ................

if (image1.IsEqual(image2))
{
// same image
}

关于c# - 比较两个位图图像以检查它们在 WPF 中是否不同的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15558107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com