小编Dan*_*iel的帖子

将画布保存到png C#wpf

所以我试图在WPF C#中拍摄我的画布快照,以便我可以将其保存为png.目前图像保存不正确,因为它包括左边距和上边距.

这就是我所拥有的:

为画布大小创建一个矩形.如果canvas.Margin.Left和Top设置为0,则保存的图像大小正确但仍然会发生偏移,从而切割底部和右侧边缘.设置Margin.Left和Top仍会导致偏移发生,但整个图像被保存但尺寸错误(margin.Left + ActualWidth)而不仅仅是ActualWidth

Rect rect = new Rect(canvas.Margin.Left, canvas.Margin.Top, canvas.ActualWidth, canvas.ActualHeight);

double dpi = 96d;

RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, (int)rect.Bottom, dpi, dpi, System.Windows.Media.PixelFormats.Default);

rtb.Render(canvas);

BitmapEncoder pngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));

try
{
    System.IO.MemoryStream ms = new System.IO.MemoryStream();

    pngEncoder.Save(ms);
    ms.Close();

    System.IO.File.WriteAllBytes(filename, ms.ToArray());
}
catch (Exception err)
{
    MessageBox.Show(err.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
Run Code Online (Sandbox Code Playgroud)

c# wpf png rendertargetbitmap

7
推荐指数
1
解决办法
1万
查看次数

检查项目是否已在向量中

因此,我想对类中的向量进行一些错误检查,以便在将新项添加到向量之前查看该项是否已存在.

ClassA cpp

void ClassA::func(std::shared_ptr<ClassB> new_item)
{
    for(auto items : vector_)
    {
        if(items = new_item)
        {
            return;
        }
        vector_.push_back(new_item);
    }
}
Run Code Online (Sandbox Code Playgroud)

vector_是成员类成员std :: vector.使用此当前实现,所有new_item都被忽略,即使它不是重复的.我知道'if(items = new_item)'是有问题的一行,但我不知道为什么.

c++ vector shared-ptr

0
推荐指数
1
解决办法
1900
查看次数

标签 统计

c# ×1

c++ ×1

png ×1

rendertargetbitmap ×1

shared-ptr ×1

vector ×1

wpf ×1