添加到画布上的图像比画布大

本文关键字:图像 布大 添加 | 更新日期: 2023-09-27 18:11:49

       <Grid Name="PlotGrid" Margin="50,50,50,50">
             <Grid.RowDefinitions>
                    <RowDefinition Height="50" />
                    <RowDefinition Height="500" />
             </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="100" />
            </Grid.ColumnDefinitions>
               <Canvas Name="canvas" Grid.Row="0" Grid.Column="0"  />
               <Border Name="firstborder"
                Grid.Column="0"
                Grid.Row="0"
                BorderBrush="Black"
                BorderThickness="1">
            </Border>
            <Border Name="secondborder"
                Grid.Column="1"
                Grid.Row="0"
                BorderBrush="Black"
                BorderThickness="1">
            </Border>
                <Border Name="thirdborder"
                Grid.Column="0"
                Grid.Row="1"
                BorderBrush="Black"
                BorderThickness="1">
            </Border>
            <Border Name="fourthborder"
                Grid.Column="1"
                Grid.Row="1"
                BorderBrush="Black"
                BorderThickness="1">
            </Border>
        </Grid>

我正在动态地将图像添加到上面的画布中,它位于网格单元格内:

            try
            {
                if ((myStream = openFileDialog.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        // Insert code to read the stream here.
                        image1.Source = new BitmapImage(new Uri( openFileDialog.FileName));
                        canvas.Children.Add(image1);
                    }
                }
            }

我的期望是导入的图像将保留在画布和包含画布的网格单元内。但它占据了一个巨大的空间,远远超出了网格单元。如何将导入的图像保持在网格单元的范围内?

添加到画布上的图像比画布大

你需要设置图像大小,否则它将是全尺寸

image1.Stretch = Stretch.Uniform;
image1.StretchDirection = StretchDirection.Both;
image1.BeginInit();
image1.Source = new BitmapImage(new Uri( openFileDialog.FileName));
image1.Width = canvas.ActualWidth;
image1.Height = canvas.ActualHeight;
image1.EndInit();

您可能还需要添加代码来处理网格的大小调整

也许这行得通:

...
image1.Stretch = Stretch.Uniform;
image1.StretchDirection = StretchDirection.Both;
image1.BeginInit();
image1.Source = new BitmapImage(new Uri( openFileDialog.FileName));
image1.EndInit();
canvas.Children.Add(image1);