Frage

ich generieren müssen Thumbnails für eine Reihe von JPEG-Dateien (200.000), aber ich möchte, dass eine gleiche Höhe und Breite alle meine Daumen machen. Allerdings mag ich nicht die Proportionen des Bildes ändern, damit ich leeren Raum zur kürzeren Dimension hinzufügen muß, um „es Platz bis“. Die Hintergrundfarbe des leeren Raumes ist variabel.

Hier ist der Code-Schnipsel ich die Daumen erzeugen bin mit. Was ist der beste Weg, um die Quadratur zu tun?

     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)
War es hilfreich?

Lösung

Wie wäre es diese. Vielleicht sollten Sie ein schwarze ziehen (oder je nachdem, welche Farbe) Rechteck auf dem Bitmap zuerst.

Und dann, wenn Sie die Größe geänderte Bild platzieren, berechnet nur die Platzierung des Bildes basierend auf Unabhängig davon, welche Dimension kürzer ist, und dann diese Dimension bewegen, indem die Hälfte der Differenz (und die übrigen auf 0).

Wäre das nicht, dass die Arbeit?

Andere Tipps

Wie Vaibhav , sagten, zuerst den gesamten Miniaturansichtsbereich mit schwarzem Lack. Dies wird einfacher sein als das Bild zuerst in die Miniatur Einpassen und dann bestimmen, welche Pillarboxing oder Letterbox .

Pseudo-Code für eine allgemeine Lösung, die ein imageWidth x imageHeight Bild in ein thumbWidth x thumbHeight passen (muss nicht ein Quadrat) Bereich:

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top