2010-04-21 8 views
8

J'ai un problème vraiment étrange avec la méthode Graphics.DrawImage. J'ai le contrôle PictureBox dans le contrôle Panel avec propriété AllowScroll = true. Le programme coupe l'image sur les petites pièces en se basant sur la zone sélectionnée par l'utilisateur.Winforms C#: graphics.DrawImage problème

je charge l'image 300x547 et sélectionnez la zone (le rectangle rouge):

alt text http://img341.imageshack.us/img341/8796/63796391.png

programme coupe correctement l'image:

alt text http://img689.imageshack.us/img689/6459/69242903.png

puis, je charge une autre image 427x640 :

alt text http://img34.imageshack.us/img34/7950/56727000.png

puis, comme résultat je vois que l'image n'est pas coupée correctement. Chaque fichier img.jpg a une largeur bien & hauteur, mais l'image dessinée est trop petit: alt text http://img641.imageshack.us/img641/1977/25643796.png

est ici l'extrait de code - il enregistre la zone bitmap sélectionnée par l'utilisateur:

Image OriginalIMG= (Image)((PictureBox)panel1.Controls["picBox"]).Image.Clone() 
    Bitmap bmp = new Bitmap(selectedAreaRECT.Width, selectedAreaRECT.Height); 
    Graphics g = Graphics.FromImage(bmp); 

    g.DrawImage(OriginalIMG, 0,0, selectedAreaRECT, GraphicsUnit.Pixel); 
    g.Save(); 
    g.Dispose(); 

    bmp.Save(AppDomain.CurrentDomain.BaseDirectory + @"\Temp\" + "img1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 

Comme vous le voyez, le code est le même pour le img1.jpg de l'image A et de l'image B. J'essaie de résoudre ce problème stupide depuis trop longtemps, je ne sais pas quelle est la raison de ce problème. J'ai essayé différentes surcharges de la méthode DrawImage, sans succès

EDIT

Résolu! la valeur dafault DPI du System.Drawing.Bitmap est = 96, si j'ouvre une image avec DPI! = 96 alors le problème décrit ci-dessus se produit. Pour se débarrasser de lui, je avais besoin d'utiliser la méthode de setResolution:

Bitmap result = new Bitmap(width, height); 
result.SetResolution(OriginalIMG.HorizontalResolution, OriginalIMG.VerticalResolution); 

qui résout le problème :) Merci pour tout le monde de l'aide! :)

+2

Avez-vous regardé les propriétés DPI de ces images? –

+0

Voulez-vous dire HorizontalResolution et VerticalResolution? ils sont = 96 – Tony

+7

Jolies photos :-) – Steven

Répondre

3

Je vais essayer: (Edited)

g.DrawImage(
    OriginalIMG, 
    new Rectangle(Point.Empty, bmp.Size), 
    selectedAreaRECT.X, selectedAreaRECT.Y, 
    selectedAreaRECT.Width, selectedAreaRECT.Height, 
    GraphicsUnit.Pixel); 

pour voir si cela fait une différence.

Bien que cela n'a rien à voir avec votre problème: vous oubliez de .Disposer() certaines choses, et je ne sais pas pourquoi vous devez .Clone() l'image.

+0

il n'y a pas de constructeur comme le vôtre – Tony

+0

Constructeur? Vous voulez dire la méthode? Opps, je vais mettre à jour ... –

Questions connexes