【问题标题】:Why doesn't Graphics::DrawImage stretch images as expected?为什么 Graphics::DrawImage 不按预期拉伸图像?
【发布时间】:2010-07-17 17:27:54
【问题描述】:

我正在拨打an overloaded TableLayoutPanel which draws some fancy borders,但由于某种原因,对Graphics::DrawImage 的调用没有按预期工作。当我拉伸它时,它似乎淡出了我的 1x10 像素源图像:

这是进行渲染的函数:

void GTableLayoutPanel::RenderSides(Graphics^ g, array<Drawing::Image^>^ sideImages)
{
    if( sideImages )
    {
        if( sideImages->Length < 4 )
        {
            throw gcnew System::ArgumentException(String::Format("Not enough images supplied to render sides (expected 4 but only got {0})", sideImages->Length));
        }

        int borderSize = sideImages[0]->Height;
        g->DrawImage(sideImages[0], Rectangle(borderSize, 0, this->Width-borderSize*2, borderSize));
        g->DrawImage(sideImages[1], Rectangle(this->Width-borderSize, borderSize, borderSize, this->Height-borderSize*2));
        g->DrawImage(sideImages[2], Rectangle(borderSize, this->Height-borderSize, this->Width-borderSize*2, borderSize));
        g->DrawImage(sideImages[3], Rectangle(0, borderSize, borderSize, this->Height-borderSize*2));
    }
}

【问题讨论】:

    标签: .net windows winforms c++-cli drawimage


    【解决方案1】:

    当您使用极端放大时,这是插值的副作用。你需要这样的东西:

     g->InterpolationMode = System::Drawing::Drawing2D::InterpolationMode::NearestNeighbor;
     g->PixelOffsetMode = System::Drawing::Drawing2D::PixelOffsetMode::None;
    

    【讨论】:

    • 足够接近;我发现使用PixelOffsetMode::Half 并添加更多像素来隐藏偶尔出现的故障,同时水平缩放它。我开始认为你在跟踪我的问题 Hans ;-)
    • @Jon,是的,不开玩笑。你知道你正在做一些不寻常的事情吗?很少使用 C++/CLI 编写 Windows 窗体编码。
    • 我经常被提醒这个事实 ;-) ..但是我团队中的其他开发人员喜欢 C++ 而不是 C#,所以我们最终也倾向于在其中编写 GUI。 .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2018-01-12
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多