Pergunta

Eu tenho um requisito que pede uma imagem com 10 x 6,88 cm. Eu sei que eu não posso simples convertido do cm para pixels, causa um tamanho do pixel depende da resolução de exibição do usuário. Gostaria de saber se existe uma maneira de redimensionar uma imagem para ter esse tamanho em cm. (Eu preciso manter a extensão de imagem também. G .: não pode convertê-lo para um pdf ou outra extensão)

Foi útil?

Solução

Ela realmente depende de em que resolução o usuário irá imprimir a imagem (tamanhos em centímetros faz pouco sentido diferente quando impressas). Se o usuário quiser fazer uma impressão em, digamos, 200 dpi, em seguida, a imagem teria de ser (10 / 2,54 * 200) por (6,88 / 2,54 * 200) pixels (a divisão com 2,54 é necessária para converter entre cm e polegadas ). Qual a resolução que é necessário é altamente dependente do tipo de imagem que é, e as exigências do usuário de qualidade.

Então, basta dizer "eu quero redimensionar a X por Y cm" realmente não faz sentido.

Para um exemplo de código sobre como fazer o redimensionamento real depois de ter descoberto o tamanho necessário da imagem, este SO responder deve cobrir suas necessidades.

Outras dicas

Na verdade, você tem que diferenciar entre o tamanho das imagens na tela, e o tamanho das imagens na impressão.

Normalmente, você encontrar a fórmula:

inches = pixels / dpi

assim segue-se:

pixel = inches * dpi

Isto é para impressão, na verdade.
Para a exibição, substitua dpi com ppi, e você está lá.

Para aqueles (como eu) que não estão familiarizados com polegadas:

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

Esta rotina irá calcular o pixel de tamanho para ter a visualização da imagem X-cm no monitor.
Mas na impressora, você não tê-lo tão fácil, desde que você não pode obter o DPI tão fácil como o PPI (bmp.HorizontalResolution & bmp.VerticalResolution).

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

Uso iria assim:

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]
}

formatos de arquivo de imagem como JPG e TIFF tem um EXIF ??cabeçalho que tem informações como horizontal e verticais DPI.

Assim, se você obter uma imagem que tem esses metadados, você pode verificar o tamanho de impressão.

double DPC = Image_DPI * 0.393700787;

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

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

Se você precisa redimensionar imagens de nunca exceder essas dimensões de impressão, você poderia fazê-lo o contrário, e calcular uma proporção de DPI que permite que a imagem de dimensões W x H ajuste dentro de 10 cm x 6,88 centímetros limites.

tipo do que Fredrik está dizendo: Gostaria de ter uma boa DPI e exigem que a imagem seja de que a resolução ou maior (mas é a mesma proporção) e ao exportar / imprimir a imagem, redimensionar a imagem para o DPI usado por outro programa / printer ...

Pode ser tão simples como isto: a maioria das imagens armazenar o número de pixels por polegada em-los. Descobrir o número de pixels em cada dimensão de sua imagem, e dividir esse valor pelo número de polegadas (convertido do cm). Em seguida, use os bits originais, basta modificar o campo para o número de pixels por polegada (ou, mais comumente, pontos por polegada).

Assim, suas necessidades de imagem a ser 3,93" x 2,71" . Se sua imagem for 393px x 271px, você deve definir o dpi para 100x100. Se sua imagem for 39px x 27px, você deve definir o dpi para 10x10.

Embora provavelmente você vai ter que fazer alguma redimensionamento, como explicado por outras respostas. :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top