1

我正在使用 c#

我有一个如下所示的位图图像

替代文字

我想在水平位置创建一个如下所示的重复图像,以获得某个给定宽度的重复连续图像。我的意思是我喜欢从上面的单个位图中绘制如下重复的图像(简单来说,在 html 中我们可以有一个图像并设置重复 X 以获取重复的图像。就像那样)我如何在 c# 中做到这一点。

替代文字

这样我就可以在我的应用程序中绘制一个新的位图。这该怎么做。?

4

3 回答 3

1
//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
}
于 2015-05-18T14:05:56.110 回答
0

您不需要创建其他位图。这是绘制位图的问题。在您绘制位图的地方,使用 drawImage 方法几次,并将位图的 X 位置增加其宽度。说 16 是图像的宽度。确保位图已初始化。

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);
}
于 2010-08-10T07:27:17.087 回答
0

你可以这样做:

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;

或者类似的东西,这是未经测试的,我只是从我不久前制作的一个小实用应用程序中撕下来的。我希望它有所帮助...您只需要更改最终图像的宽度并在g.DrawImage调用上执行循环,将第二个参数增加原始图像的宽度。(即如果你想要 5 次重复,做一个 for 循环 5 次)

HTH--马克

于 2010-08-11T06:54:10.757 回答