gpt4 book ai didi

c# - WriteableBitmap 周围不需要的红色边框

转载 作者:行者123 更新时间:2023-11-30 23:02:55 27 4
gpt4 key购买 nike

我正在将分形作为一个私有(private)项目来练习(离开初学者水平^^)。我有一个包含图像的 Canvas ,该图像绑定(bind)到 WriteableBitmap:

<Canvas Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="1" Grid.RowSpan="1" Name="RenderCanvas" Background="LightCyan">
<Image Name="RenderImage" Source="{Binding Path=RenderBitmap}" Stretch="Fill" Height="{Binding Path=BitmapHeight, Mode=OneWayToSource}" Width="{Binding Path=BitmapWidth, Mode=OneWayToSource}"/>
</Canvas>

我的 View 模型类目前看起来像这样:

public class MainViewModel : ViewModelBase  
{
#region private fields
private int _bitmapheight;
private int _bitmapwidth;
private WriteableBitmap _renderbitmap = new WriteableBitmap(500, 500, 96, 96, PixelFormats.Bgr32, null);
#endregion

#region public properties
public int BitmapHeight
{
get { return _bitmapheight; }
set { SetProperty<int>(ref _bitmapheight, value); }
}
public int BitmapWidth
{
get { return _bitmapwidth; }
set { SetProperty<int>(ref _bitmapwidth, value); }
}
public WriteableBitmap RenderBitmap
{
get { return _renderbitmap; }
set { SetProperty<WriteableBitmap>(ref _renderbitmap, value); }
}
#endregion

#region Constructors
public MainViewModel ()
{
}
#endregion

#region public Methods
public void updateRenderBitmap(int size, int destX, int destY)
{
Int32Rect rect = new Int32Rect(0, 0, size, size);
byte[] sourcebuffer = new byte[size * size * 4];
for(int currentbyte = 0; currentbyte < sourcebuffer.Length; currentbyte++)
{
sourcebuffer[currentbyte] = 255;
}
int stride = size * 4;
_renderbitmap.WritePixels(rect, sourcebuffer, stride, destX, destY);
}
#endregion
}

因此,为了测试到目前为止是否一切正常,我从 MainWindow.xaml.cs 调用了更新方法:

  public MainWindow()
{
InitializeComponent();
MainViewModel vm = (MainViewModel)this.DataContext;
vm.updateRenderBitmap(250, 125, 125);
}

事实证明,一切都按预期工作,我的 Canvas 设置了 Background,里面有一个来自 WriteableBitmap 的黑色方 block ,里面有一个白色方 block 我更新了:

Screenshot但是,到目前为止我有两个问题:

  1. 如您所见,图像周围有一个红色边框。我真的不知道它来自哪里,但我想删除它。
  2. 目前,我用一个固定的数字初始化_renderbitmap。但是,我希望它具有 RenderImage 的大小,它绑定(bind)到 BitmapWidthBitmapHeight。但显然我不能使用它们,因为它们不是静态的 - 如果我将它们设为静态我可以使用它们,但它们在实例化期间的值仍然为 0。

最佳答案

红色边框的原因是验证错误,由非工作绑定(bind)导致

Width="{Binding Path=BitmapWidth, Mode=OneWayToSource}"

Height="{Binding Path=BitmapHeight, Mode=OneWayToSource}" 

这些绑定(bind)会产生错误,因为当未明确设置时,WidthHeight 属性的值为 double.NaN

您根本不应该拥有这些绑定(bind)。与其让 View 模型知道图像的渲染大小,不如将逻辑坐标(例如在区间 0 .. 1 中)传递给 View 模型会更好。

关于c# - WriteableBitmap 周围不需要的红色边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50211091/

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