【问题标题】:DrawImage Height Parameter Not WorkingDrawImage 高度参数不起作用
【发布时间】:2015-03-30 15:54:59
【问题描述】:

我正在使用 VS2012 c++/cli 制作一个 WinForms 应用程序,并使用 DrawImage 来显示从网络摄像头捕获的高清图像。

图像是 1920 x 1080 位图,我试图在面板控件上显示。面板为 240 x 135(即,正好是高清图像的 1/8)。

我调用 DrawImage 如下:

    System::Drawing::Rectangle destRect = System::Drawing::Rectangle(0,0,Cam0Panel->Width,Cam0Panel->Height);
    g->DrawImage(b,destRect);

这应该指定在面板上的相对 0,0 位置绘制图像,并将图像大小设置为 240 x 135。但是,图像不会显示。

如果我更改 Height 参数以指定 Panel->Bottom(这是应用程序中的绝对位置 - ~630),图像会显示并且宽度大小正确,但高度大小不正确。

知道我做错了什么或如何正确调整和显示图像的大小吗?

这是代码的完整版本。

    void Cam0Panel_Paint( Object^ /*sender*/, System::Windows::Forms::PaintEventArgs^ e )
    {
        System::Drawing::Bitmap^ b = ImageWinArray[CHANNEL_SELECT0];
        Graphics^ g = e->Graphics;

        g->InterpolationMode = System::Drawing::Drawing2D::InterpolationMode::Bilinear;
        g->CompositingMode = System::Drawing::Drawing2D::CompositingMode::SourceCopy;
        System::Drawing::Rectangle destRect = System::Drawing::Rectangle(0,0,Cam0Panel->Width,Cam0Panel->Bottom);

        g->DrawImage(b,destRect);
    }

感谢您的帮助。

【问题讨论】:

  • 发生了什么?它使用什么高度而不是“正确的高度”?
  • 当高度被指定为面板高度(即135)时,什么都不会显示。当我将高度指定为 636(即窗口中的绝对位置)时,图像会显示但垂直方向未正确调整大小。
  • 您的代码是正确的。它应该工作。如果你在 (0, 0) 处使用 destRect 而不是 point,你会得到什么?

标签: c++ winforms visual-studio-2012 drawimage


【解决方案1】:

我想通了。存储位图的数组已初始化,但初始化范围不够持久。因此,存储在数组中的引用可能会被垃圾清理。出于某种奇怪的原因,揭示这一点的唯一方法是 drawimage 调用中的垂直参数。一旦我更正了初始化,drawimage 调用就会正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多