문제

C#에서 이미지를 자르는 메소드를 작성했습니다. 새로운 비트 맵을 만들고 원본 이미지에서 지정된 사각형 (자르기 위해 잘린 영역)을 그려서 그것을 수행합니다.

내가 시도한 이미지의 경우 잘못된 결과를 생성했습니다. 결과 이미지의 크기는 옳았지만 내용은 그랬습니다. 이미지가 2만큼 스케일링 된 다음 자른 것과 같았습니다. 결국이 라인을 추가하면 다음과 같습니다.

result.setResolution(72, 72)

하지만 왜 해결책이 필요합니까? 나는 단지 픽셀로 일하고 있는데, 결코 인치 나 센티미터로 절대로 일하고 있습니다. 또한 올바른 해상도는 무엇입니까?

전체 코드는이 확장 방법입니다.

public static Bitmap Crop(this Image image, int x, int y, int width, int height) {
    Bitmap result = new Bitmap(width, height);
    result.SetResolution(72, 72);

    // Use a graphics object to draw the resized image into the bitmap.
    using (Graphics graphics = Graphics.FromImage(result)) {
        // High quality.
        graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        // Draw the image into the target bitmap.
        graphics.DrawImage(image, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
    }

    return result;
}
도움이 되었습니까?

해결책

당신은 잘못된 오버로드를 사용하고 있습니다. SRC 및 Dest RECT를 지정하는 곳을 사용해야합니다.

graphics.DrawImage(image, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel);

그것을 시도하고 그것이 작동하지 않으면 의견으로 알려주십시오.

다른 팁

나는 대답이 라이브러리가 실제로 수정하는 방식에 있다고 생각합니다. 메모리 블록 주위에 복사하고 페이스트합니다. 해상도는 픽셀 당 사용되는 비트/바이트 수를 지정합니다. 복사해야 할 바이트 수를 알기 위해서는 픽셀 당 몇 비트/바이트가 사용되는지 알아야합니다.

그러므로 나는 이것이 간단한 곱셈과 회원이 이어진다고 생각합니다.

문안 인사

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top