문제

10 x 6,88cm의 이미지를 요구하는 요구 사항이 있습니다. CM에서 픽셀로 간단하게 변환 할 수 없다는 것을 알고 있습니다. 하나의 픽셀 크기가 사용자 디스플레이 해상도에 따라 다릅니다. CM의 크기를 갖도록 이미지를 크기를 조정하는 방법이 있는지 알고 싶습니다. (이미지 확장도 유지해야합니다. 예 : PDF 또는 기타 확장으로 변환 할 수 없습니다)

도움이 되었습니까?

해결책

실제로 사용자가 이미지를 인쇄하는 해상도에 달려 있습니다 (CM의 크기는 인쇄 할 때 외에는 거의 의미가 없습니다). 사용자가 200 dpi로 인쇄하려면 (6.88 / 2.54 * 200) 픽셀 (2.54가있는 분할은 CM과 인치 사이에서 변환해야합니다. ). 필요한 해상도는 어떤 종류의 이미지와 사용자의 품질 요구 사항에 크게 의존합니다.

따라서 "x로 크기를 조정하고 싶습니다"라고 말하는 것은 실제로 의미가 없습니다.

이미지의 필요한 크기를 파악한 후 실제 크기를 만드는 방법에 대한 코드 샘플의 경우. 이렇게 대답합니다 귀하의 요구를 충족해야합니다.

다른 팁

실제로 화면의 이미지 크기와 인쇄물의 이미지 크기를 구별해야합니다.

일반적으로 공식을 찾습니다.

inches = pixels / dpi

그래서 그것은 다음과 같습니다.

pixel = inches * dpi

이것은 실제로 인쇄 용입니다.
디스플레이의 경우 DPI를 PPI로 바꾸면 있습니다.

인치에 익숙하지 않은 (나 같은)를 위해 :

inches = pixels / dpi
pixel = inches * dpi
1 centimeter = 0.393700787 inch
pixel = cm * 0.393700787  * dpi

이 루틴은 픽셀 크기를 계산하여 모니터에 이미지 X-CM이 표시됩니다.
그러나 프린터에서는 PPI (bmp.horizontalresolution & bmp.verticalresolution)만큼 DPI를 쉽게 얻을 수 없기 때문에 프린터에서는 쉽지 않습니다.

public static int Cm2Pixel(double WidthInCm)
{
    double HeightInCm = WidthInCm;
    return Cm2Pixel(WidthInCm, HeightInCm).Width;
} // End Function Cm2Pixel


public static System.Drawing.Size Cm2Pixel(double WidthInCm, double HeightInCm)
{
    float sngWidth = (float)WidthInCm; //cm
    float sngHeight = (float)HeightInCm; //cm
    using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1, 1))
    {
        sngWidth *= 0.393700787f * bmp.HorizontalResolution; // x-Axis pixel
        sngHeight *= 0.393700787f * bmp.VerticalResolution; // y-Axis pixel
    }

    return new System.Drawing.Size((int)sngWidth, (int)sngHeight);
} // End Function Cm2Pixel

사용법은 다음과 같습니다.

public System.Drawing.Image Generate(string Text, int CodeSize)
        {
            int minSize = Cm2Pixel(2.5); // 100;
            if (CodeSize < minSize)
                CodeSize = minSize;

            if (string.IsNullOrEmpty(Text))
            {
                System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(CodeSize, CodeSize);

                using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(bmp))
                {

                    gfx.Clear(System.Drawing.Color.Black);
                    using(System.Drawing.Font fnt = new System.Drawing.Font("Verdana", 12, System.Drawing.FontStyle.Bold))
                    {
                        double y = CodeSize / 2.0 - fnt.Size;
                        gfx.DrawString("No Data", fnt, System.Drawing.Brushes.White, 5, (int)y, System.Drawing.StringFormat.GenericTypographic);
                    } // End Using fnt

                } // End using gfx

                return bmp;
            } // End if (string.IsNullOrEmpty(Text))

...[Generate QR-Code]
return [Generated QR-Code]
}

JPG 및 TIFF와 같은 이미지 파일 형식은 an을 가지고 있습니다 exif 헤더 수평 및 수직 DPI와 같은 정보가 있습니다.

따라서이 메타 데이터가있는 이미지를 얻으면 인쇄 가능한 크기를 확인할 수 있습니다.

double DPC = Image_DPI * 0.393700787;

double widthInCm = Image_Width * DPC;
double heightInCm = Image_Height * DPC;

if (widthInCm <= 10 && heightInCm <= 6.88) // do stuff

이러한 인쇄용 치수를 초과하지 않도록 이미지를 크기를 조정 해야하는 경우 다른 방법으로는 다른 방식으로 수행 할 수 있으며, 10cm x 6.88cm 범위 내에서 x h의 이미지를 맞출 수있는 DPI 비율을 계산할 수 있습니다.

Fredrik이 말하는 것의 종류 : 나는 멋진 DPI를 취하고 이미지를 해상도 또는 더 큰 (그러나 동일한 종횡비)로 요구하고 이미지를 내보내거나 인쇄 할 때 이미지를 다른 프로그램에서 사용하는 DPI로 크기를 조정해야합니다. /인쇄기...

대부분의 이미지는 인치당 픽셀 수를 저장합니다. 이미지의 각 차원에서 픽셀 수를 파악하고이를 인치 수 (CM에서 변환)로 나눕니다. 그런 다음 원래 비트를 사용하고 인치당 픽셀 수 (또는 더 일반적으로 인치당 점)를 수정하십시오.

따라서 사진은 3.93 "x 2.71"여야합니다. 이미지가 393px x 271px 인 경우 DPI를 100x100으로 설정합니다. 이미지가 39px x 27px 인 경우 DPI를 10x10으로 설정합니다.

아마도 다른 답변에서 설명했듯이 크기 조정을해야 할 것입니다. :)

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