C#を使用しています
以下のようなビットマップ画像を持っています
以下のような繰り返し画像を水平位置に作成して、一定の幅で繰り返し連続画像を取得したいと思います。私は上記の単一のビットマップから以下のような繰り返し画像を描くのが好きだということを意味しました(簡単に言えば、htmlでは画像を作成し、繰り返しXを設定して繰り返し画像を取得できます。そのように)c#でこれを行う方法。
アプリケーションで新しいビットマップを描画できるようにします。これを行う方法。?
C#を使用しています
以下のようなビットマップ画像を持っています
以下のような繰り返し画像を水平位置に作成して、一定の幅で繰り返し連続画像を取得したいと思います。私は上記の単一のビットマップから以下のような繰り返し画像を描くのが好きだということを意味しました(簡単に言えば、htmlでは画像を作成し、繰り返しXを設定して繰り返し画像を取得できます。そのように)c#でこれを行う方法。
アプリケーションで新しいビットマップを描画できるようにします。これを行う方法。?
//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
}
次のように実行できます。
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
、2番目のパラメーターをoriginalImageの幅だけインクリメントする呼び出しをループするだけです。(つまり、5 回繰り返したい場合は、for ループを 5 回実行します)
HTH -- マーク
他のビットマップを作成する必要はありません。ビットマップの描画の問題です。ビットマップを描画する場所で、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);
}