2010-07-17 6 views
3

an overloaded TableLayoutPanel which draws some fancy borders을 만들고 있는데 어떤 이유로 Graphics::DrawImage에 대한 호출이 예상대로 작동하지 않습니다.Graphics :: DrawImage가 이미지를 예상대로 늘리지 않는 이유는 무엇입니까?

alt text

이것은 렌더링 수행하는 기능입니다 : 내가 그것을 스트레칭 할 때 제 1 × 픽셀 원본 이미지를 페이드 아웃 것으로 보인다

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)); 
    } 
} 

답변

4

그것은 보간의 부작용이를 때를 극한 배율을 사용하십시오. 다음과 같은 것이 필요합니다.

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

충분히 근접합니다. 나는 'PixelOffsetMode :: Half'를 사용하여 발견하고 수평으로 스케일을 조정하는 동안 occational 글리치를 숨기기 위해 더 많은 픽셀을 추가했습니다. 나는 내 질문을 스토킹하고 있다고 생각하기 시작했다 한스 ;-) –

+0

@ 존, 네, 농담이 아닙니다. 특이한 일을하고 있다는 것을 알고 있습니까? C++/CLI로 작성된 Windows Forms 코딩은 거의 수행되지 않습니다. –

+0

그 사실을 꽤 정기적으로 생각 나게합니다 .-)하지만 다른 Dev는 C++과 같은 팀에서 C++을 사용하기 때문에 GUI를 작성하는 경향이 있습니다. –