2010-12-10 2 views
4

이미지의 너비가 1px이고 높이가 약간 있습니다. 이 이미지를 OnPaint 이벤트의 컨트롤 전체 너비에 그려야합니다. 나는 그리기를 얻지 만 올바르게하지는 않는다. 그것이 뻗어있을 때 실제로 모든 픽셀을 채우지 않는 것처럼 보입니다. 마치 보간법이 꺼져있는 것처럼 말입니다. "현명함을 멈추고, 이미 그려"라고 말할 수있는 방법이 있습니까? InterpolationMode.Off 또는 .None 그래픽 개체에 대한 옵션을 참조하십시오.C# 이미지에 이미지 그리기 (스케일링)가 올바르게 삽입되지 않았습니다. 수정?

실제로 너비가 X 인 이미지를 사용하여 전체 너비를 그릴 수 있는지 확인할 수 있습니다. 여기서 X는 컨트롤과 동일한 너비입니다. 그런 다음 그릴 때 평소대로 전체 영역을 덮습니다. 그러나이 컨트롤은 항상 크기가 조정되며 메모리를 절약하기 위해 1px 크기의 이미지를 사용하는 모든 재즈는 웹 세상에서 매우 정상입니다. 데스크톱 C# 응용 프로그램을위한 것입니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

답변

9

확인을 나는 마법의 키워드를 알아 냈어.

보간 모드를 설정하지 않으면 이상한 블렌딩 (예상)이 발생합니다. PixelOffsetMode를 설정하지 않으면 가장 가까운 이웃 알고리즘은 빈 페인트에서 비교할 이웃이 없으므로 절반의 이미지 만 그립니다. 너비의 절반입니다. 반쪽을 오프셋하도록 설정하면 모든 것을 -0.5 픽셀 씩 이동하고이 알고리즘이 블록 텍스처에 사용할 수 있습니다.

+2

동일한 문제가 있었고 PixelOffsetMode 및 InterpolationMode의 여러 변형을 시도한 후에 이것이 나에게 도움이되었습니다. Google을 통해 검색하는 사용자 : PixelOffsetMode를 Half로 설정하면 graphics.DrawImage (...)는 별칭없이 이미지 (MS Paint 에서처럼)의 크기를 조정하고 지정한 크기/사각형을 지정한 크기로 채 웁니다. 유물/블렌딩을 염려하지 않을 때 단색 이미지/패턴을 오버레이하려는 경우이 옵션이 유용합니다 (하나의 단색, 아무 것도 없기 때문에). – Andrew

0

이 경우 InterpolationMode.NearestNeighbor를 사용합니다. 전체 블록이 그려 질 수 있습니다

g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; 

이 NearestNeighbour에 보간 모드 설정과 함께 :

+0

나는 이것을 시도해 보았고 정확히 1/2 너비의 비트 맵을 제공했다. 다른 모드는 중간 이후에 다양한 투명도를 제공하지만 InterpolationMode.NearestNeighbor는 0.5 * wanted_width 만 그립니다. – Nick

+0

사실이 아니므로 코드의 다른 곳에 문제가 있어야합니다. 나는 그것을 시험해 보았다. 보간 모드는 그려진 이미지의 너비와 아무 관련이 없습니다. –

+0

그 밖의 것은 그려지지 않습니다. 내 대답은 아래를 확인하십시오. PixelOffset과 관련이 있습니다. 쉽게 재현 할 수 있습니다. 모든 컨트롤을 가져와 OnPaint 이벤트를 재정의하고 1px 너비의 이미지를 전체 너비로 그립니다. 그러면 너비가 50 %로만 표시됩니다. 이제 PixelOffset을 설정하면 100 %가 표시됩니다. 이것은 Visual Studio 2010 및 여러 다양한 컨트롤의 .NET 4.0에서 모두 동일하게 작동합니다. – Nick

관련 문제