2009-10-07 4 views

Répondre

1

Un moyen facile de persister images tirées en .Net est de faire le dessin sur un objet Bitmap séparé, puis définissez la propriété d'image de PictureBox égale à la Bitmap, comme ceci:

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); 
using (Graphics g = Graphics.FromImage(bmp)) 
{ 
    // draw whatever 
} 
pictureBox1.Image = bmp; 

Désolé, c'est C#, mais il devrait illustrer le principe OK. Une autre façon de conserver les images dessinées est de faire le dessin dans l'événement Paint de PictureBox, mais cela signifie que le code de dessin s'exécutera chaque fois que le contrôle doit se repeindre (chaque fois qu'un autre formulaire est déplacé) etc.). La méthode ci-dessus (définition de la propriété Image du contrôle) est plus simple à faire.

+0

Obtenez-le! Bit plus lent, mais si je minimise la fenêtre, il va plus vite. Considérant qu'il doit tirer 30.000 pixels INDIVIDUELLEMENT, 3 secondes n'est pas mauvais. – Cyclone

+0

Si vous dessinez pixel par pixel, une technique plus rapide mais légèrement plus compliquée consiste à appeler la méthode LockBits sur le bitmap. Voir http://www.vb-helper.com/howto_net_lockbits_image_class.html ou http://www.bobpowell.net/lockingbits.htm – MusiGenesis

+0

J'utilisais SetPixel, qui était assez lent comme vous pouvez l'imaginer, surtout parce que j'ai ajouté quelques application.doevents() lol – Cyclone

0

Dans le cas ci-dessus, lorsque l'objet "bmp" ou "g" est hors de portée et que les données sont collectées, l'image de la zone d'image change. Je pense que l'image est toujours copiée. J'ai essayé bmp.clone pour copier l'image sur la boîte à image, mais quand bmp est ramassé, l'image de la boîte à images disparaît. Dans mon cas, j'ai un certain nombre de (déterminées au moment de l'exécution) de telles images à assigner à des cadres d'image créés à l'exécution.

Dim bm As New Bitmap("C:\picture.bmp") 
Dim thumb As New Bitmap(42, 30) 
Dim g As Graphics = Graphics.FromImage(thumb) 

g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic 
g.DrawImage(bm, New Rectangle(0, 0, 42, 30), New Rectangle(0, 0, bm.Width, _bm.Height), GraphicsUnit.Pixel) 
pbxHead.Image = thumb.Clone() 

g.Dispose() 
bm.Dispose() 
thumb.Dispose() 
Questions connexes