通过BitmapSource的CopyPixels和Create方法来切割图片

<Window x:Class="WpfApplication2.CropImageWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CropImageWindow" Height="300" Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <UniformGrid Rows="1">
            <Image Name="image1" Source="a.jpg" />
            <Image Name="image2" Source="a.jpg" />
            <Image Name="image3" Source="a.jpg" />
        </UniformGrid>
        <!--<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
            <Image Name="image1" Source="a.jpg" />
            <Image Name="image2" Source="a.jpg" />
        </StackPanel>-->
        <Button Grid.Row="1" Content="切割图像" Name="btnCropImage" Click="btnCropImage_Click" />
    </Grid>
</Window>

namespace WpfApplication2
{
    /// <summary>
    /// CropImageWindow.xaml 的交互逻辑
    /// </summary>
    public partial class CropImageWindow : Window
    {
        const string path = @"D:\b.jpg";
        const string savePath = @"D:\c.jpg";
        public CropImageWindow()
        {
            InitializeComponent();
            this.Loaded += (sender, e) =>
            {
                image1.Source = new BitmapImage(new Uri(path));
            };
        }
        private void btnCropImage_Click(object sender, RoutedEventArgs e)
        {
            BitmapSource bitmap = new BitmapImage(new Uri(path, UriKind.Absolute));
            //切割矩形
            var rect = new Int32Rect((int)bitmap.Width / 2, 0, (int)bitmap.Width / 2, (int)bitmap.Height / 2);
            //计算好图像每行所占字节数(Stride参数)和偏移量(Offset参数,通常是0)
            var stride = bitmap.Format.BitsPerPixel * rect.Width / 8;
            //声明字节数组
            byte[] data = new byte[rect.Height * stride];
            //调用 CopyPixels
            bitmap.CopyPixels(rect, data, stride, 0);
            image2.Source = BitmapSource.Create((int)bitmap.Width / 2, (int)bitmap.Height / 2, 0, 0, PixelFormats.Bgr32, null, data, stride);
            //反色处理
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)(Byte.MaxValue - data[i]);
            }
            image3.Source = BitmapSource.Create((int)bitmap.Width / 2, (int)bitmap.Height / 2, 0, 0, PixelFormats.Bgr32, null, data, stride);
        }
    }
}

点击查看原图

知识共享许可协议
《通过BitmapSource的CopyPixels和Create方法来切割图片》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     154.86ms