WPF 怎么实现 图像拉伸 边角不拉伸 (求大神解答)
WPF 如何实现 图像拉伸 边角不拉伸 (求大神解答)
如题想实现 类似 android/ios 中的图像拉伸 取中间像素将图像拉伸使图像拉伸而不失真 而且边角没有发生变化
类似效果图:
图片发不上来 发个地址:http://blog.csdn.net/q199109106q/article/details/8615661
------解决方案--------------------
如题想实现 类似 android/ios 中的图像拉伸 取中间像素将图像拉伸使图像拉伸而不失真 而且边角没有发生变化
类似效果图:
图片发不上来 发个地址:http://blog.csdn.net/q199109106q/article/details/8615661
------解决方案--------------------
public class NineGridBorder : Border
{
public ImageSource Image
{
get { return (ImageSource) base.GetValue(ImageProperty); }
set { base.SetValue(ImageProperty, value); }
}
public static readonly DependencyProperty ImageProperty = DependencyProperty.Register("Image",
typeof (ImageSource), typeof (NineGridBorder),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));
public Thickness ImageMargin
{
get { return (Thickness) GetValue(ImageMarginProperty); }
set { SetValue(ImageMarginProperty, value); }
}
public static readonly DependencyProperty ImageMarginProperty =
DependencyProperty.Register("ImageMargin", typeof (Thickness), typeof (NineGridBorder),
new FrameworkPropertyMetadata(new Thickness(), FrameworkPropertyMetadataOptions.AffectsRender));
public double ImageOpacity
{
get { return (double) GetValue(ImageOpacityProperty); }
set { SetValue(ImageOpacityProperty, value); }
}
public static readonly DependencyProperty ImageOpacityProperty =
DependencyProperty.Register("ImageOpacity", typeof (double), typeof (NineGridBorder),
new FrameworkPropertyMetadata(1D, FrameworkPropertyMetadataOptions.AffectsRender));
private bool IsNineGrid
{
get { return !ImageMargin.Equals(new Thickness()); }
}
protected override void OnRender(DrawingContext dc)
{
DrawImage(dc, new Rect(0, 0, RenderSize.Width, RenderSize.Height));
}
private void DrawImage(DrawingContext dc, Rect rect)
{
ImageSource source = Image;
if (source != null)
{
double opacity = ImageOpacity;
if (IsNineGrid)
{
Thickness margin = Clamp(ImageMargin, new Size(source.Width, source.Height), rect.Size);
double[] xGuidelines = {0, margin.Left, rect.Width - margin.Right, rect.Width};
double[] yGuidelines = {0, margin.Top, rect.Height - margin.Bottom, rect.Height};
GuidelineSet guidelineSet = new GuidelineSet(xGuidelines, yGuidelines);