2012-01-31 3 views
3

그래픽 클래스를 사용하여 비트 맵의 ​​크기를 조정하면 원본 이미지의 오른쪽 및 아래쪽 픽셀이 일부 생략됩니다.축소 후 이미지 테두리가 누락됩니다.

original result60 result30

내 코드 :

foreach(int x in new[]{60, 30}) 
{ 
    var result = new Bitmap(x, x); 
    var g = Graphics.FromImage(result); 
    g.DrawImage(new Bitmap(MediaDir + "original.png"), 0, 0, x, x); 
    result.Save(MediaDir + "result" + x + ".png", ImageFormat.Png); 
} 

나는 실종 뭔가 여기

는 예 (원본, 60X60, 30x30)인가?

enter image description here enter image description here enter image description here enter image description here

답변

2

크기 조정 과정 자체의 효과가 될 가능성이 높습니다 :

편집, 여기 HighQualityBicubic를 사용하여 결과입니다. 사용 된 알고리즘에 따라 테두리에서 픽셀의 붉은 색을 더 이상 흰색 이미지와 관련이없는 것으로 감지하여 흰색이 출력됩니다.

+0

나는 동의하지만 그것은 버그 같은 솔기가있다. 생각하지 않니? –

+0

그게 달려 있습니다 - 알고리즘에 대한 사양이 "픽셀에 대해 가장 중요한 색만 사용"이라고 말하면 버그가 아닙니다. 평균 색 농도와 출력을 가정한다면, 그렇습니다. 나는 동의합니다. – ZombieSheep

+0

이것은 버그가 아닙니다. 생각해 보면 이미지를 축소하면 데이터가 손실됩니다. HighQualityBicubic과 같은 더 똑똑한 보간 모드는 데이터를 적게 소비하지만 데이터는 여전히 손실됩니다. 이미지 크기를 조정하여 3 픽셀 씩 하나씩 병합하면 3 개 중 2 개가 버려집니다. 너의 얇은 붉은 색 선은 버려지고 만다. 두꺼운 경우 (1 픽셀 너비 이상) 여전히 나타날 수 있습니다. –

3

보간 모드를 InterpolationMode.HighQualityBicubic으로 설정하십시오.

Microsoft Tutorial에서 매개 변수의 효과를 볼 수 있습니다. 왼쪽 하단 예제는 당신과 비슷한 문제가 있습니다.

+0

사실, 원래 코드에서 InterpolationMode.Bicubic을 이미 사용하고 있습니다. 문제가 해결되지는 않습니다. –

+0

@TomEsterez, Bicubic과 HighQualityBicubic의 차이점은이 문제를 직접 해결하는 것입니다. –

+0

HighQualityBicubic은 문제를 조금 덜 보이지만 여전히 나타냅니다. –

0

이 해결 방법은 "버그"입니다. 내가 standart eshop 항목 사진의 크기를 조정하면 일부는 회색 왼쪽/위쪽 테두리 및 일부 테두리가 있습니다. 그래서이 코드를 사용하십시오.

g.DrawImage(src, -1, -1, width+1, height+1); 

및 그 작업이 완벽합니다. 나는 또한 pixelmode에 대한 힌트를 찾거나 drawimage 메서드를 사용하여 특별한 attr을 사용해 보았지만 나에게 도움이되지는 않는다.