Question

J'ai besoin de générer des miniatures pour un tas de jpegs (plus de 200 000) mais je veux m'assurer que tous mes pouces ont la même hauteur et la même largeur. Cependant, je ne veux pas changer les proportions de l'image, je dois donc ajouter un espace vide à la dimension la plus courte pour le "cadrer". La couleur de fond de l'espace vide est variable.

Voici l'extrait de code que j'utilise pour générer les vignettes. Quelle est la meilleure façon de faire la quadrature?

     Dim imgDest As System.Drawing.Bitmap = New Bitmap(ScaleWidth, ScaleHeight)
     imgDest.SetResolution(TARGET_RESOLUTION, TARGET_RESOLUTION)  
     Dim grDest As Graphics = Graphics.FromImage(imgDest)

     grDest.DrawImage(SourceImage, 0, 0, imgDest.Width, imgDest.Height)
Était-ce utile?

La solution

Qu'en est-il de cela? Vous devriez peut-être commencer par dessiner un rectangle noir (ou de n'importe quelle couleur) sur le bitmap.

Et ensuite, lorsque vous placez l'image redimensionnée, calculez son emplacement en fonction de la dimension la plus courte, puis déplacez cette dimension de la moitié de la différence (et laissez l'autre sur 0).

Cela ne fonctionnerait-il pas?

Autres conseils

Comme le dit Vaibhav , commencez par peindre en noir toute la zone des miniatures. Ce sera plus simple que de commencer par insérer l'image dans la vignette, puis de déterminer les rectangles sur lesquels peindre en noir pour atteindre pillarboxing ou Letterboxing .

Pseudo-code pour une solution générale s'adaptant à une image imageWidth x imageHeight dans un thumbWidth x thumbHeight (ne doit pas nécessairement être un carré) zone:

imageRatio = imageWidth / imageHeight;
thumbRatio = thumbWidth / thumbHeight;

zoomFactor = imageRatio >= thumbRatio
    ? thumbWidth / imageWidth 
    : thumbHeight / imageHeight;

destWidth = imageWidth * zoomFactor;
destHeight = imageHeight * zoomFactor;

drawImage(
    (thumbWidth - destWidth) >> 1,
    (thumbHeight - destHeight) >> 1,
    destWidth,
    destHeight);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top