为什么 Graphics::DrawImage 不能按预期拉伸图像?

Jon*_*age 3 .net windows c++-cli drawimage winforms

我正在制作一个重载TableLayoutPanel,它绘制了一些花哨的边框,但由于某种原因,调用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));
    }
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 5

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

 g->InterpolationMode = System::Drawing::Drawing2D::InterpolationMode::NearestNeighbor;
 g->PixelOffsetMode = System::Drawing::Drawing2D::PixelOffsetMode::None;
Run Code Online (Sandbox Code Playgroud)

  • 足够接近; 我发现使用“PixelOffsetMode::Half”并添加更多像素来隐藏偶尔出现的故障,同时水平缩放可以解决这个问题。我开始认为你在跟踪我的问题,汉斯;-) (2认同)