Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF:如何避免图像脱离画布';中国的边界?_Wpf_Canvas_Transparency - Fatal编程技术网

WPF:如何避免图像脱离画布';中国的边界?

WPF:如何避免图像脱离画布';中国的边界?,wpf,canvas,transparency,Wpf,Canvas,Transparency,我有一个画布作为图像查看器。它的背景是用来放置一个图像,我想把另一个图像放在上面。所以,场景是这样的: <Canvas Name="VisorCanvas" Height="514" Width="720"> <Canvas.Background> <ImageBrush /> </Canvas.Background> <Image Name="foreground" /> </Canvas>

我有一个画布作为图像查看器。它的背景是用来放置一个图像,我想把另一个图像放在上面。所以,场景是这样的:

 <Canvas Name="VisorCanvas"  Height="514"  Width="720">
   <Canvas.Background>
   <ImageBrush />
   </Canvas.Background>
   <Image Name="foreground"  />
</Canvas>

我在代码隐藏(C#)中动态插入图像

问题是,如果图像太大,则图像会超出画布的边界。例如:我有一个不相关的背景图像,我想通过以下方式在画布面板内(背景上方)显示一个正方形:

  • 在任何情况下,正方形的图像都将调整大小
  • 如果它比画布的尺寸小,我就显示出来
  • 如果它在任何尺寸(宽度或高度)都较大,我需要裁剪它或将图像的一部分设置为透明。这样做,我实现了电视模式或类似的东西,因为图形总是看起来“在”画布中(尽管部分被裁剪)
我该怎么做?我试过:

  • 使用裁剪位图裁剪图像,但不准确
  • 要通过附加的不透明贴图图像使用透明度,但我需要从原始图像创建一个具有透明度的贴图,我不知道如何做到这一点
  • 使用RenderTargetBitmap创建一张“照片”,并用此方法的结果替换图像,但我不能
如果有人能解释一下,我将不胜感激。

Canvas
元素中设置
cliptobunds=“True”
,这将阻止图像超出画布的边界


您可能还想考虑不要使用<代码>图像< /代码>元素。您可以使用

矩形
,将
填充
设置为
图像笔刷
,因为您可以使用
Viewbox
Viewport
属性选择所需源图像的哪一部分以及所需输出的大小。(将
ViewportUnits
设置为
Absolute
以精确控制绘制区域的尺寸。)

cliptobunds!修复了一些Z顺序问题。为我工作。为了澄清,应该在父对象上设置ClipToBounds。@TylerPantuso所说的“父对象”是指
画布
?如果是的话,那正是我在第一句话中所说的。如果不是,你是什么意思?您是否发现需要在画布的父级上设置它?如果是这样,那就不正常了。