Related Question크기 조정 된 이미지의 XY 좌표 및 높이/너비를 원래 크기의 이미지로 변환하려면 어떻게해야합니까?
나는 C#으로 링크 된 질문과 같은 것을하려고합니다. 크기 조정 된 이미지를 보여 주며 사용자가자를 영역을 선택할 수있게합니다. 그러나, 나는 스케일링 된 이미지 선택에서 x1y1, x2y2 좌표를 가져 와서 원본에서 자르기 만 할 수는 없습니다. 나는 다른 질문에서와 같이 기본적인 수학을 시도해 보았지만 분명히 올바른 접근법이 아니었다.
편집
원본 이미지 크기 : w = 1024 h = 768
스케일 이미지 크기 : 나는 이미지로 시작 w = 550 h = 412
는 1024을 말한다. 550x550 상자에 가능한 한 크게 넣기를 바랍니다. 다음 방법을 사용하여 가로 세로 비율을 유지하면서 크기 조정 된 이미지 크기를 가져옵니다. 그런 다음 새로운 차원에 대한 기본 크기 조정을 수행합니다.
선택 영역은 (0,0)에서 (100,100)까지 선택할 수 있습니다.
private static Rectangle MaintainAspectRatio(Image imgPhoto, Rectangle thumbRect)
{
int sourceWidth = imgPhoto.Width; int sourceHeight = imgPhoto.Height; int sourceX = 0; int sourceY = 0; int destX = 0; int destY = 0;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)thumbRect.Width/(float)sourceWidth);
nPercentH = ((float)thumbRect.Height/(float)sourceHeight);
//if we have to pad the height pad both the top and the bottom
//with the difference between the scaled height and the desired height
if (nPercentH < nPercentW)
{
nPercent = nPercentH;
destX = (int)((thumbRect.Width - (sourceWidth * nPercent))/2);
}
else
{
nPercent = nPercentW;
destY = (int)((thumbRect.Height - (sourceHeight * nPercent))/2);
}
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Rectangle retRect = new Rectangle(thumbRect.X, thumbRect.Y, destWidth, destHeight);
return retRect;
}
여기서는 크기 조정 된 이미지의 0입니까? 왼쪽 상단 또는 왼쪽 하단? –
왼쪽 상단으로 가정합니다. – scottm
변환 (2x2 행렬)을 사용하여 이미지의 크기를 조절합니다. 해당 행렬의 역함수를 사용하여 좌표 변환을 수행합니다. 원본 이미지 크기, 위치 및 변형 된 이미지 크기, 위치에 대한 구체적인 수치 예제를 제공하십시오. 일부 사람들은 그런 생각을하기 쉽고 일부 모호성은 제거합니다. –