Q
填充矩形的外部
8
A
回答
5
您也可以用半透明Path
元件重疊圖像使用一個CombinedGeometry
它結合一個非常大的外部矩形具有內矩形:
<Grid>
<Image Name="image" Source="C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"/>
<Path Fill="#AAFFFFFF">
<Path.Data>
<CombinedGeometry GeometryCombineMode="Xor">
<CombinedGeometry.Geometry1>
<RectangleGeometry Rect="0,0,10000,10000"/>
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<RectangleGeometry x:Name="transparentRect" Rect="150,100,200,100"/>
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
</Grid>
您現在將根據需要以編程方式調整transparentRect
成員的Rect
屬性。
+0
您的答案使用C#語法高亮顯示。這是不正確的,因爲XAML是XML。其中一個明顯的問題是元素和屬性具有相同的顏色。 – Athari
2
您可以使用OpacityMask和DrawingBrush的組合:
XAML:
<Grid Background="Gray">
<Image Name="image"Source="...">
<Image.OpacityMask>
<DrawingBrush x:Name="mask"/>
</Image.OpacityMask>
</Image>
</Grid>
代碼隱藏:
private void UpdateOpactiyMask()
{
Point topLeft = new Point();
Point bottomRight = new Point(image.ActualWidth, image.ActualHeight);
GeometryDrawing left = new GeometryDrawing();
left.Brush = borderBrush;
left.Geometry = new RectangleGeometry(new Rect(topLeft, new Point(SelectedArea.Left, bottomRight.Y)));
GeometryDrawing right = new GeometryDrawing();
right.Brush = borderBrush;
right.Geometry = new RectangleGeometry(new Rect(new Point(SelectedArea.Right, topLeft.Y), bottomRight));
GeometryDrawing top = new GeometryDrawing();
top.Brush = borderBrush;
top.Geometry = new RectangleGeometry(new Rect(new Point(SelectedArea.Left, topLeft.Y), new Point(SelectedArea.Right, SelectedArea.Top)));
GeometryDrawing bottom = new GeometryDrawing();
bottom.Brush = borderBrush;
bottom.Geometry = new RectangleGeometry(new Rect(new Point(SelectedArea.Left, SelectedArea.Bottom), new Point(SelectedArea.Right, bottomRight.Y)));
GeometryDrawing center = new GeometryDrawing();
center.Brush = selectionBrush;
center.Geometry = new RectangleGeometry(SelectedArea);
DrawingGroup drawing = new DrawingGroup();
drawing.Children.Add(left);
drawing.Children.Add(right);
drawing.Children.Add(top);
drawing.Children.Add(bottom);
drawing.Children.Add(center);
mask.Drawing = drawing;
}
SelectedArea是一個矩形。
2
可以使用UIElement.Clip
屬性:
<Window x:Class="So17720970_RectangularBoublik.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
SizeToContent="WidthAndHeight">
<Grid Width="500" Height="500">
<Image Source="http://i.stack.imgur.com/Py65S.jpg"/> <!-- image -->
<Rectangle Fill="#AA000000"> <!-- selection -->
<Rectangle.Clip>
<GeometryGroup FillRule="Nonzero"> <!-- selection clip: -->
<RectangleGeometry Rect="0 0 500 200"/> <!-- top -->
<RectangleGeometry Rect="0 0 100 500"/> <!-- left -->
<RectangleGeometry Rect="0 300 500 200"/> <!-- bottom -->
<RectangleGeometry Rect="400 0 100 500"/> <!-- right -->
</GeometryGroup>
</Rectangle.Clip>
</Rectangle>
<Rectangle StrokeThickness="1" Stroke="Black" StrokeDashArray="1 2" SnapsToDevicePixels="True"
Margin="100 200 100 200"/> <!-- "ants" -->
</Grid>
</Window>
1
這是使用OpacityMask的解決方案的變體。而不是在代碼中完成,它是在XAML中完成的。此外,它顛倒了邏輯:不是繪製4個邊框,而是繪製2個矩形。最後,這個解決方案的重要特性是中央透明矩形的大小與圖像大小(而不是絕對像素)有關。您不需要知道實際的圖像大小或其拉伸/定位方式(對Stretch =「Uniform」尤其重要)。在這裏,我將圖像大小(maskRect)指定爲1,1,並使用小數作爲相對掩碼大小和位置(transpRect)。你也可以指定圖像尺寸爲100,100,並使用掩碼的百分比值(或者甚至使用實際的像素值)。
<Grid Background="#FFF4F4F5" >
<Image Name="PhotoImage" Source="...">
<Image.OpacityMask>
<DrawingBrush>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing>
<GeometryDrawing.Geometry>
<RectangleGeometry x:Name="maskRect" Rect="0,0,1,1"/>
</GeometryDrawing.Geometry>
<GeometryDrawing.Brush>
<SolidColorBrush Color="#60000000" />
</GeometryDrawing.Brush>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Geometry>
<RectangleGeometry x:Name="transpRect" Rect=".25,.20,.40,.40"/>
</GeometryDrawing.Geometry>
<GeometryDrawing.Brush>
<SolidColorBrush Color="Black" />
</GeometryDrawing.Brush>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Image.OpacityMask>
</Image>
</Grid>
相關問題
- 1. 在矩形外部填充畫布
- 2. 部分填充矩形對象
- 3. Fabric.js - 更改矩形填充
- 4. 矩形漸變填充
- 5. 填充按鈕和矩形
- 6. 用矩形填充面板
- 7. 油滑 - 填充矩形
- 8. 填充矩形的扇形片
- 9. 繪製透明圓形外部填充
- 10. 用矩形填充多邊形
- 11. 用矩形填充2D形狀
- 12. 從UIIMage創建UIIMageView會導致ImageView的外部矩形爲灰色填充
- 13. 將矩形的填充顏色填充爲前景色
- 14. 填充矩形中的Java Swing模式
- 15. 使用圖像的矩形填充
- 16. 刪除填充的矩形c#
- 17. lapack - 填充矩形格式的尋址
- 18. 用Java中的圖像填充矩形
- 19. 填充區域的矩形選擇?
- 20. 檢測用碰撞填充的矩形
- 21. Java:填充網格上的矩形
- 22. 如何在xaml中部分填充畫布內的矩形
- 23. 從頂部減少填充矩形的高度
- 24. 我如何填充一個矩形區域除外
- 25. 當旋轉外部矩形時,在矩形內移動矩形
- 26. 用圖像填充WPF矩形
- 27. 用圖像填充ShapeRenderer矩形(.png)?
- 28. 結算ctx.fillStyle繪製填充矩形
- 29. Android重繪矩形填充白色
- 30. 畫布矩形填充顏色
有一個剪輯屬性,您可以操縱以獲得您想要的結果。 – Nitesh