【问题标题】:Only top portion of image is saved仅保存图像的顶部
【发布时间】:2014-02-16 01:00:06
【问题描述】:

我正在使用以下代码来保存画布的图片

if (!Directory.Exists(DefaultSettings.MainPath + "//Skeleton Images//"))
    Directory.CreateDirectory(DefaultSettings.MainPath + "//Skeleton Images//");
System.Windows.Size size = new System.Windows.Size(canvas.Width, canvas.Height);
canvas.Measure(size);
canvas.Arrange(new System.Windows.Rect(size));
RenderTargetBitmap renderBitmap = new RenderTargetBitmap( (int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32);
renderBitmap.Render(canvas);
using (FileStream outstream = new FileStream(DefaultSettings.MainPath + "//Skeleton Images//Kinected (" + images + ").jpg", FileMode.Create))
{
    JpegBitmapEncoder cEncoder = new JpegBitmapEncoder();
    cEncoder.Frames.Add(BitmapFrame.Create(renderBitmap));
    cEncoder.Save(outstream);
}

但是,它只保存图像的顶部。虽然图片大小是321x240,画布大小也是一样的大小。为什么会这样?之前使用的相同代码保存了整个画布,那么为什么会突然产生错误?下图说明问题。另请注意,画布放置在图像顶部,因为它们是单独渲染的,并且画布一直延伸到“色框”文本。

【问题讨论】:

    标签: c# wpf-controls


    【解决方案1】:

    虽然图片大小是321x240,画布大小也是一样的

    他们有,但他们不使用相同的单位。位图大小以 像素 为单位,画布大小以 1/96 英寸 为单位。由于在许多相同数量的机器上,这往往可以正常工作。但是,当您在具有不同的视频适配器每英寸点数设置的机器上运行时,则不会。更高版本的 Windows 使更改这一点变得非常简单,预先设置了 125% 和 150% 的选项。和你一样。

    您必须以像素为单位创建一个更大 位图。 this question 已经很好地覆盖了。

    【讨论】:

      【解决方案2】:

      尝试以这种方式查找大小:

      private static Size SizeCalculation(Size image, Size boundingBox)
      {       
          double widthScale = 0, heightScale = 0;
          if (image.Width != 0)
              widthScale = (double)boundingBox.Width / (double)image.Width;
          if (image.Height != 0)
              heightScale = (double)boundingBox.Height / (double)image.Height;                
      
          double scale = Math.Min(widthScale, heightScale);
      
          Size result = new Size((int)(image.Width * scale), 
                              (int)(image.Height * scale));
          return result;
      }
      

      查看您是否使用此代码获得了合适的尺寸,并且您的代码可以使图像适合它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-03
        • 2020-12-21
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多