2011-10-06 4 views
2

J'ai un fichier de ressources (au format .png) qui contient plusieurs images. Ils sont dimensionnés et espacés d'une manière où ils devraient être relativement faciles à appeler en fonction de leurs compensations.C# Charger une image avec un décalage

Je peux dimensionner la zone d'image pour qu'elle corresponde parfaitement à une image; Cependant, je ne sais pas comment charger l'image en fonction de ses décalages, donc je vais toujours obtenir celui en haut à gauche. Je peux vraiment utiliser n'importe quelle méthode, mais je n'ai pas réussi à trouver quoi que ce soit d'utile dans mes recherches - puisque je ne savais pas vraiment quoi chercher.

Répondre

6

En supposant que votre image PNG est imgwidth pixels de large et composé par n images horizontales, vous pouvez essayer ceci:

Image imgsrc = Image.FromFile("...."); // your PNG file 
Image imgdst = new Bitmap(imgwidth/n, imgsrc.Height); 
using (Graphics gr = Graphics.FromImage(imgdst)) 
{ 
    gr.DrawImage(imgsrc, 
     new RectangleF(0, 0, imgdst.Width, imgdst.Height), 
     new RectangleF(imgindex * imgwidth/n, 0, imgwidth/n, imgsrc.Height), 
     GraphicsUnit.Pixel); 
} 

L'idée est de créer une nouvelle image (imgdst) et d'en tirer dessus la partie de l'image originale dont vous avez besoin.
Avec une nouvelle image, vous pouvez faire ce que vous voulez, même dessiner dans une image.

0

Il semble que vous essayez de faire quelque chose comme des sprites; où vous avez juste une image chargée, puis déplacez le «port de visualisation» pour afficher différentes images.

Si c'est le cas, vous ne pourrez pas le faire avec la classe PictureBox. Vous pouvez contrôler le dimensionnement, mais pas le positionnement. Je pense que ce que vous auriez à faire est de charger l'image, via le code, et de créer de nouvelles images basées sur la partie nécessaire de cette image (en utilisant GDI +).

7

Vous pouvez placer le PictureBox dans un Panel en utilisant le panneau comme fenêtre d'affichage. Assurez-vous que la propriété AutoScroll du panneau est false afin que les barres de défilement n'apparaissent pas. Ensuite, chargez l'image dans le PictureBox et définissez son emplacement par rapport au Panel afin que seule la zone que vous souhaitez afficher soit visible.

pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize; 
pictureBox1.Image = Image.FromFile(@"C:\MyPicture.png"); 
pictureBox1.Location = new Point(-100, -100); 
+0

Ma première idée était de stocker l'image originale et de créer une copie mais c'est beaucoup mieux, merci. –

+0

c'est une bonne idée –

0

Si vous voulez juste pour afficher une image pour les utilisateurs, vous pouvez ajouter l'image dans une étiquette, puis définissez la propriété d'alignement de l'image que vous le souhaitez.

Questions connexes