2010-08-10 5 views
1

me sers C#Répéter l'image en position horizontale (C# Dessin)

am avoir une image bitmap comme ci-dessous

alt text http://img210.imageshack.us/img210/2460/89372850.jpg

je veux créer une image répétée comme ci-dessous en position horizontale pour obtenir répétées très améliorée image continue pour une largeur donnée. Je voulais dire que je voudrais dessiner une image répétée comme ci-dessous à partir du bitmap ci-dessus (en mots simples, en HTML, nous pouvons avoir une image et définir répéter X pour obtenir l'image répétée) comme je peux le faire en C#.

alt text http://img59.imageshack.us/img59/7663/26679829.jpg

afin que je puisse dessiner une nouvelle image dans mon application. Comment faire cela?

+0

aiment les illustrations MS Paint! – Mark

Répondre

0

Vous pouvez le faire comme ceci:

Bitmap myImage = new Bitmap(50, 50); //assuming you want you image to be 50,50 
Bitmap originalImage = new Bitmap("myPngSource.png"); //original image to copy 

using (Graphics g = Graphics.FromImage(myImage)) 
{ 
    g.DrawImage(originalImage, new Rectangle(0, 0, originalImage.Width, originalImage.Height)); 
} 

MemoryStream ms = new MemoryStream(); 
myImage.Save(ms, ImageFormat.Png); 

BitmapImage bi = new BitmapImage(); 
bi.BeginInit(); 
bi.StreamSource = ms; 
bi.EndInit(); 

MyImageControl.Source = bi; 

Ou quelque chose comme ça, ce n'est pas testé, et je viens déchiré dehors d'une petite application utilitaire j'ai fait il y a un certain temps. J'espère que cela aide ... Vous avez juste besoin de changer la largeur de l'image finale et faire une boucle sur l'appel g.DrawImage incrémenter le deuxième paramètre par la largeur de l'originalImage. (À savoir si vous voulez 5 répétitions, faire une boucle 5 fois)

HTH --Mark

0

Vous n'avez pas besoin de créer d'autres bitmaps. c'est une question de dessin bitmap. à l'endroit où vous avez tracé le bitmap, utilisez méthode drawImage plusieurs fois et incrémentez la position X du bitmap par sa largeur. disons 16 est la largeur de votre image. assurez-vous que bitmap a été initialisé.

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 

    e.Graphics.DrawImage(bmp,x,y); 
    e.Graphics.DrawImage(bmp,x+16,y); 
    e.Graphics.DrawImage(bmp,x+32,y); 
} 
+0

j'ai essayé ceci, mais son ne fonctionne pas, l'image créée en dernier dans le graphique, quand j'essaye de dessiner le bmp son dessin pas le dernier bmp, voulez-vous que je dessine le bmp ou le graphique ??? pouvez-vous m'objecter plus –

+0

@deep Graphics est une classe pour dessiner dans .NET afin que vous puissiez dessiner des images via cette classe comme dans l'exemple. Une chose à mentionner est que vous devez savoir où appeler cette routine. Je plaide recomend pour gérer l'événement Paint de votre contrôle et utilise l'argument Graphics from PaintEventArgs au lieu de le créer. – Arseny

+0

son Arseny ne fonctionne pas, j'ai essayé de lier le nouveau, mais ne reçois pas l'image répétée? –

0
//x- integer value represents no. of times images to repeated horizontally 
var destImage = new Bitmap(sourceImage.Width * x, sourceImage.Height, PixelFormat.Format32bppArgb); 
using (TextureBrush brush = new TextureBrush(sourceImage, WrapMode.Tile)) 
using (Graphics g = Graphics.FromImage(destImage)) 
{ 
// Do your drawing here 
g.FillRectangle(brush, 0, 0, destImage.Width, destImage.Height); 
destImage.Save(@"C:\sourceImage.png", ImageFormat.Png); 
//mention path of image to save, if needed 
}