图像缩放问题 [英] Image scaling problem

查看:56
本文介绍了图像缩放问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




这可能是一个简单的错误。但是,我一直在研究这个问题几个小时,看不出有什么问题。



我想通过比例因子进行缩放和成像。请查看以下代码。

 <   StackPanel  >  
< StackPanel 名称 = < span class =code-keyword> StackDesktop 宽度 = 自动 高度 = 自动 >
< 标签 名称 = LabSlideName 宽度 = 自动 内容 = 幻灯片名称 高度 = < span class =code-keyword> 25 前景 = 白色 / >
< 网格 名称 = GridPreview 宽度 = 640 高度 = 480 Horizo​​ntalAlignment = 中心 VerticalAlignment = 中心 已移除 = DarkBlue >
< 网格 名称 = < span class =code-keyword> GridImage >
< Viewbox 名称 = ViewBoxPreview 拉伸 = StretchDirection = 两者 < span class =code-attribute> / >
< / Grid >
< / Grid >
< / StackPanel >
< / StackPanel >





代码背后



 SlideShow.SlideShow node = ExperimentLibrary.Experiment.Instance.GetSlideShow()。GetNodeByID(id); 
System.Windows.Controls.Image img = new System.Windows.Controls.Image();
位图bmp = new Bitmap((int)node.Slide.PresentationSize.Width,(int)node.Slide.PresentationSize.Height);

图形g = System.Drawing.Graphics.FromImage(bmp);
node.Slide.Draw(g);
IntPtr hBitmap = bmp.GetHbitmap();
System.Windows.Media.ImageSource WpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap,IntPtr.Zero,Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());
img.Source = WpfBitmap;

double scale = GridPreview.Width / System.Windows.SystemParameters.PrimaryScreenWidth;
GridImage.Width =(int)(WpfBitmap.Width * scale);
GridImage.Height =(int)(WpfBitmap.Height * scale);
ViewBoxPreview.Stretch = Stretch.UniformToFill; ;
ViewBoxPreview.Child = img;





原始图片尺寸为640 * 480。最终显示的图像是234 * 135。由于比例为0.4685,GridImage.Width = 299,GridImage.Height = 224,我期待最终图像为299 * 224.



有人可以帮助吗因为我被卡住了...



干杯....

解决方案

[这不是回答,应该删除。 OP应该使用改善问题将其移至问题--SA]



看这里,



 <   StackPanel  > ;  
< StackPanel 名称 = StackDesktop 宽度 = 自动 高度 = 自动 >
< 标签 名称 = LabSlideName 宽度 = 自动 内容 = 幻灯片名称 高度 = 25 前景 = 白色 / >
< 网格 名称 = GridPreview 宽度 = 640 Height = 480 Horizo​​ntalAlignment = 中心 VerticalAlignment = 中心 背景 = DarkBlue 保证金 = 26, 0,34,0 >
< 网格 名称 = GridImage >

< / Grid >
< / Grid >
< / StackPanel >
< / StackPanel >







 SlideShow.SlideShow node = ExperimentLibrary.Experiment。 。Instance.GetSlideShow()GetNodeByID(ID); 
System.Windows.Controls.Image img = new System.Windows.Controls.Image();
位图bmp = new Bitmap((int)node.Slide.PresentationSize.Width,(int)node.Slide.PresentationSize.Height);

图形g = System.Drawing.Graphics.FromImage(bmp);
node.Slide.Draw(g);
IntPtr hBitmap = bmp.GetHbitmap();
System.Windows.Media.ImageSource WpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap,IntPtr.Zero,Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());
img.Source = WpfBitmap;


double scale = GridPreview.Width / System.Windows.SystemParameters.PrimaryScreenWidth;
img.Width =(int)(WpfBitmap.Width * scale);
img.Height =(int)(WpfBitmap.Height * scale);
img.Stretch = Stretch.UniformToFill; ;
img.StretchDirection = StretchDirection.Both;
GridImage.Children.Add(img);





图像仍然是234 * 135 ...任何想法为什么? ?


Hi
This is probably a simple mistake. However, I have been working on this for hours and can''t see what is wrong.

I want to scale and image by a scaling factor. Look at the following code.

 <StackPanel>
    <StackPanel Name="StackDesktop" Width="Auto" Height="Auto" >
        <Label Name="LabSlideName" Width="Auto" Content="Slide Name" Height="25" Foreground="White"/>
        <Grid Name="GridPreview" Width="640" Height="480" HorizontalAlignment="Center" VerticalAlignment="Center" removed="DarkBlue" >
            <Grid Name="GridImage">
                <Viewbox Name="ViewBoxPreview" Stretch="None" StretchDirection="Both" />
            </Grid>
        </Grid>
    </StackPanel>
</StackPanel>



Code Behind

SlideShow.SlideShow node = ExperimentLibrary.Experiment.Instance.GetSlideShow().GetNodeByID(id);
            System.Windows.Controls.Image img = new System.Windows.Controls.Image();
            Bitmap bmp = new Bitmap((int)node.Slide.PresentationSize.Width, (int)node.Slide.PresentationSize.Height);
             
            Graphics g = System.Drawing.Graphics.FromImage(bmp);
            node.Slide.Draw(g);
            IntPtr hBitmap = bmp.GetHbitmap();
            System.Windows.Media.ImageSource WpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
            img.Source = WpfBitmap;

            double scale = GridPreview.Width / System.Windows.SystemParameters.PrimaryScreenWidth;
            GridImage.Width = (int)(WpfBitmap.Width * scale);
            GridImage.Height = (int)(WpfBitmap.Height * scale);
            ViewBoxPreview.Stretch = Stretch.UniformToFill; ;
            ViewBoxPreview.Child = img;



The original image size is 640*480. The final displayed image is 234*135. As scale is 0.4685, and GridImage.Width = 299 and GridImage.Height = 224, I was expecting the final image to be 299*224.

Can someone please help as I am stuck...

Cheers....

解决方案

[This is not an answer and should be removed. OP should move it to the question using "Improve question" —SA]

Look here,

<StackPanel>
                        <StackPanel Name="StackDesktop" Width="Auto" Height="Auto" >
                            <Label Name="LabSlideName" Width="Auto" Content="Slide Name" Height="25" Foreground="White"/>
                            <Grid Name="GridPreview" Width="640" Height="480" HorizontalAlignment="Center" VerticalAlignment="Center" Background="DarkBlue" Margin="26,0,34,0" >
                                <Grid Name="GridImage">

                                </Grid>
                            </Grid>
                        </StackPanel>
                    </StackPanel>




SlideShow.SlideShow node = ExperimentLibrary.Experiment.Instance.GetSlideShow().GetNodeByID(id);
            System.Windows.Controls.Image img = new System.Windows.Controls.Image();
            Bitmap bmp = new Bitmap((int)node.Slide.PresentationSize.Width, (int)node.Slide.PresentationSize.Height);
             
            Graphics g = System.Drawing.Graphics.FromImage(bmp);
            node.Slide.Draw(g);
            IntPtr hBitmap = bmp.GetHbitmap();
            System.Windows.Media.ImageSource WpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
            img.Source = WpfBitmap;

            
                double scale = GridPreview.Width / System.Windows.SystemParameters.PrimaryScreenWidth;
                img.Width = (int)(WpfBitmap.Width * scale);
                img.Height = (int)(WpfBitmap.Height * scale);
                img.Stretch = Stretch.UniformToFill; ;
                img.StretchDirection = StretchDirection.Both;
                GridImage.Children.Add(img);



Image is still 234*135...Any ideas why???


这篇关于图像缩放问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆