Question

J'ai écrit une méthode pour rogner les images en C #. Pour ce faire, il crée un nouveau bitmap et y trace un rectangle spécifié (la zone à rogner) à partir de l'image d'origine.

Les images que j'ai essayées généraient des résultats erronés. La taille de l'image résultante était correcte, mais le contenu l'était. C'était comme si l'image avait été augmentée de 2 puis rognée. En fin de compte, cette ligne a été corrigée:

result.setResolution(72, 72)

Mais pourquoi ai-je besoin d'une résolution? Je travaille juste avec des pixels, jamais avec des pouces ou des centimètres. Aussi, quelle serait alors la bonne résolution?

Le code complet correspond à cette méthode d'extension:

public static Bitmap Crop(this Image image, int x, int y, int width, int height) {
    Bitmap result = new Bitmap(width, height);
    result.SetResolution(72, 72);

    // Use a graphics object to draw the resized image into the bitmap.
    using (Graphics graphics = Graphics.FromImage(result)) {
        // High quality.
        graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        // Draw the image into the target bitmap.
        graphics.DrawImage(image, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
    }

    return result;
}
Était-ce utile?

La solution

Vous utilisez une surcharge incorrecte de DrawImage. Vous devriez utiliser celui où vous spécifiez les Src et Destrects.

graphics.DrawImage(image, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel);

Essayez-le et laissez-moi savoir dans les commentaires si cela ne fonctionne pas.

Autres conseils

Je suppose que la réponse réside dans la façon dont la bibliothèque effectue la modification. il suffit de copier et coller autour de quelques blocs de mémoire. la résolution spécifie le nombre de bits / octets utilisés par pixel. pour savoir combien d'octets il doit copier, il a besoin de savoir combien de bits / octets par pixel sont utilisés.

donc je pense que ceci est une simple multiplication suivie d'une memcopy.

salutations

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