[英]How to save Graphics as a bitmap image
我只是想知道如何做,如何將使用Graphics繪制到表單上的內容保存到位圖文件,到目前為止我嘗試過的一切都沒有用,只是我正在做的事情的背景,我我正在嘗試創建一個隨機地形生成器,我已經使整個工作正常進行,我只需要知道如何將圖形另存為位圖,因為在此之后,文件將被加載到另一個程序中,並用於創建完整的地形,至少那是個主意...
這是我的代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Random_Terrian_1_x_1_pixel
{
public partial class Form1 : Form
{
int start = 0;
int count = 0;
int layer = 251;
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Height: " + this.Height + ", Width: " + this.Width);
}
private void placeBlocks1ToolStripMenuItem_Click(object sender, EventArgs e)
{
start = start + 10;
count = count + 1;
if (count >= 999)
{
// MessageBox.Show("Layer full");
}
else
{
//this.Text = Convert.ToString(count);
Random rand = new Random();
int num = rand.Next(1, 3);
SolidBrush blockstone = new SolidBrush(Color.Gray);
SolidBrush blockcoal = new SolidBrush(Color.Black);
if (num == 1)
{
Graphics g = this.CreateGraphics();
g.FillRectangle(blockstone, new Rectangle(start, layer, 10, 10));
g.Dispose();
}
if (num == 2)
{
Graphics g = this.CreateGraphics();
g.FillRectangle(blockcoal, new Rectangle(start, layer, 10, 10));
g.Dispose();
}
}
}
private void button1_Click_1(object sender, EventArgs e)
{
start = start + 10;
count = count + 1;
if (count >= 999)
{
// MessageBox.Show("Layer full");
}
else
{
//this.Text = Convert.ToString(count);
Random rand = new Random();
int num = rand.Next(1, 3);
SolidBrush blockstone = new SolidBrush(Color.Gray);
SolidBrush blockcoal = new SolidBrush(Color.Black);
if (num == 1)
{
Graphics g = this.CreateGraphics();
g.FillRectangle(blockstone, new Rectangle(start, layer, 10, 10));
g.Dispose();
}
if (num == 2)
{
Graphics g = this.CreateGraphics();
g.FillRectangle(blockcoal, new Rectangle(start, layer, 10, 10));
g.Dispose();
}
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click_1(object sender, EventArgs e)
{
if (Convert.ToInt16(textBox1.Text) == 1)
{
layer = 251;
start = 0;
}
if (Convert.ToInt16(textBox1.Text) == 2)
{
layer = 241;
start = 0;
}
if (Convert.ToInt16(textBox1.Text) == 3)
{
layer = 231;
start = 0;
}
if (Convert.ToInt16(textBox1.Text) == 4)
{
layer = 221;
start = 0;
}
if (Convert.ToInt16(textBox1.Text) == 5)
{
layer = 211;
start = 0;
}
}
private async void placeByNumberToolStripMenuItem_Click(object sender, EventArgs e)
{
int placecount = 0;
while (placecount <= 19)
{
await Task.Delay(250);
button1.PerformClick();
}
}
private void clearToolStripMenuItem_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
g.Clear(SystemColors.Control);
}
private void newToolStripButton_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
g.Clear(SystemColors.Control);
}
}
}
您不能直接保存Graphics
,但是可以首先創建一個Bitmap
,從中導出新的Graphics
,在Graphics
上繪制,然后保存該Bitmap
,如下所示:
Bitmap bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bitmap);
// Now you have a Graphics you can draw on as much as you want
g.DrawRectangle(...);
// Then, save it
bitmap.Save(@"C:\MyImage.png", ImageFormat.Png);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.