-3
次はすべてC#で書かれています。 さまざまなグラフィックメソッドを使用してキャンバス(LevelPanel)に描画し、XMLファイルに保存しています。私は、文字列に変換することによりそう:Windowsフォームアプリケーション変換文字列をキャンバスに描画
private void Save_Click(object sender, EventArgs e)
{
string filename = FileNameBox.Text;
Bitmap bmp = new Bitmap(LevelPanel.Width, LevelPanel.Height);
Graphics g = Graphics.FromImage(bmp);
Rectangle rect = LevelPanel.RectangleToScreen(LevelPanel.ClientRectangle);
g.CopyFromScreen(rect.Location, Point.Empty, LevelPanel.Size);
g.Dispose();
string picString = "";
using (MemoryStream m = new MemoryStream())
{
bmp.Save(m, ImageFormat.Png);
picString = Convert.ToBase64String(m.ToArray());
m.Close();
}
File.WriteAllText(@filename, picString);
}
私は、ファイルを読み込むことができます任意の方法は、(文字列を取り、画像に戻ってそれを変換)あります。私は周りを見回しましたが、これで何も見つかりませんでした。どんな援助も感謝して受け入れられます。それが不可能な場合は、誰かがxmlファイルとして画像を保存/読み込む別の方法を提案することができます。あなただけのXMLファイルを読んだ後、この
string base64String = File.ReadAllText("somefile.xml");
のようなXMLを読むあなたは、このメソッドを呼び出すことにより、画像に戻って、それを変換することができますFile.WriteAllText("somefile.xml", picString);
でXMLを保存している場合
ありがとうございました。それをPannelに戻すと、システムのメモリが足りなくなります。LevelPanel.BackgroundImage = Imageを使用しています。前と同じようにコンパイルします。何か案は? – CyberRat
この行の答えを更新しました '新しいビットマップを返します(Image.FromStream(ms、true));'。しかし、あなたが大きな画像を使って作業しているのでなければ、メモリが不足しています。画像を使い終わったら、あなたの画像を処分することを忘れないでください。 –
ええ、私はそれらを処分するのを忘れていました。しかし、disposeコマンドをどこに置くべきか分かりません。ロード直後に.Dispose()を使用すると、次のエラーが表示されます。System.Drawing.dllで未処理の 'System.ArgumentException'例外が発生し、パラメータは無効です。 – CyberRat