Question

J'ai une exigence qui demande une image de 10 x 6,88 cm. Je sais que je ne peux pas convertir simplement cm en pixels, car une taille de pixel dépend de la résolution d'affichage de l'utilisateur. Je voudrais savoir s'il existe un moyen de redimensionner une image pour avoir cette taille en cm. (Je dois également conserver l’extension d’image. Par exemple: je ne peux pas le convertir en pdf ou autre extension)

Était-ce utile?

La solution

Cela dépend vraiment de la résolution dans laquelle l’utilisateur imprimera l’image (les tailles en cm n’ont pas de sens si elles ne sont pas imprimées). Si l'utilisateur souhaite imprimer, par exemple 200 ppp, l'image doit être de (10 / 2,54 * 200) pixels (6,88 / 2,54 * 200) pixels (la division avec 2,54 est nécessaire pour convertir entre cm et pouces ). La résolution requise dépend fortement du type d'image et des exigences de qualité de l'utilisateur.

Il suffit donc de dire "Je veux redimensionner à X par Y cm" n'a pas vraiment de sens.

Pour un exemple de code sur la façon de redimensionner une fois que vous avez déterminé la taille requise de l'image, cette réponse à cette SO devrait couvrir vos besoins.

Autres conseils

En fait, vous devez faire la différence entre la taille des images à l'écran et la taille des images sur l'impression.

généralement, vous trouvez la formule:

inches = pixels / dpi

il en résulte:

pixel = inches * dpi

Ceci est pour l'impression, en fait.
Pour l’affichage, remplacez dpi par ppi, et le tour est joué.

Pour ceux (comme moi) qui ne connaissent pas pouces:

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

Cette routine calculera la taille en pixels pour que l'image s'affiche en cm sur l'écran.
Mais sur l’imprimante, ce n’est pas aussi simple, car vous ne pouvez pas obtenir le DPI aussi simple que le PPI (bmp.HorizontalResolution & amp; 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

l’utilisation serait la suivante:

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

Les formats de fichier image tels que JPG et TIFF ont un en-tête EXIF ?? contenant des informations telles que horizontal et DPI vertical.

Ainsi, si vous obtenez une image contenant ces métadonnées, vous pouvez vérifier la taille imprimable.

double DPC = Image_DPI * 0.393700787;

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

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

Si vous devez redimensionner les images pour ne jamais dépasser ces dimensions imprimables, vous pouvez le faire dans l’inverse et calculer un taux de DPI permettant à l’image de dimensions L x H d’être ajustée dans des limites de 10cm x 6,88cm.

Un peu ce que dit Fredrik: Je prendrais un bon DPI et exigerais que l'image soit cette résolution ou plus grande (mais est le même rapport d'aspect) et lors de l'exportation / impression de l'image, redimensionner l'image au DPI utilisé par l'autre programme / imprimante ...

C’est peut-être aussi simple que cela: la plupart des images stockent le nombre de pixels par pouce qu’elles contiennent. Déterminez le nombre de pixels dans chaque dimension de votre image et divisez-le par le nombre de pouces (convertir en cm). Ensuite, utilisez les bits d'origine, modifiez simplement le champ pour le nombre de pixels par pouce (ou, plus communément, points par pouce).

Votre image doit donc comporter 3,93 " x 2,71 ". Si votre image est 393px x 271px, définissez le dpi sur 100x100. Si votre image mesure 39 x 27 pixels, définissez la résolution sur 10 x 10.

Cependant, vous devrez probablement redimensionner, comme expliqué par d'autres réponses. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top