sono riuscito a creare un piccolo paint con tunzioni basilari (colore, forme, dimensione, apri immagine, chiudi e SALVA)
è proprio su quest' ultimo salva che si basa il problema
io ho un panel (panel1 per la precisione, ma sarebbe lo stesso anche con una picturebox, ho testato) su cui disegno qualcosa, faccio salva, e mi compare il file salvato, ma bianco (colore di sfondo del panel)
oltre al panel mi avvalgo (si dice cosi? mah!) di uno oggetto 'Graphic' G1, su cui faccio le modifiche, che però non salva nel panel1.Image (l' immagine del panel)
vorrei creare un oggetto bitmap che racchiude all' inizio il panel, e ogni modifica fatta mi incorpora il G1, così salvo il bitmap e sono aposto =D
il problema è: COME SI FAAA ??????
vi posto il codice del form1:
- Codice: Seleziona tutto
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
bool paint = false;
SolidBrush color;
public Color coloreScelto;
public int forma = 1;
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void button1_Click(object sender, EventArgs e)
{
Graphics g1 = panel1.CreateGraphics();
g1.Clear(panel1.BackColor);
}
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
paint = true;
try
{
int dimensionix = int.Parse(textBox1.Text);
int dimensioniy = int.Parse(textBox2.Text);
int angoloinizio = int.Parse(textBox3.Text);
int angolofine = int.Parse(textBox4.Text);
color = new SolidBrush(coloreScelto);
Graphics g1 = panel1.CreateGraphics();
if (forma == 1) { g1.FillEllipse(color, e.X, e.Y, dimensionix, dimensioniy); }
if (forma == 2) { g1.FillRectangle(color, e.X, e.Y, dimensionix, dimensioniy); }
if (forma == 3) { g1.FillPie(color, e.X, e.Y, dimensionix, dimensioniy, angoloinizio, angolofine); }
}
catch
{
MessageBox.Show("Errore","Errore");
}
}
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
paint = false;
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
try
{
if (paint)
{
int dimensionix = int.Parse(textBox1.Text);
int dimensioniy = int.Parse(textBox2.Text);
int angoloinizio = int.Parse(textBox3.Text);
int angolofine = int.Parse(textBox4.Text);
color = new SolidBrush(coloreScelto);
Graphics g1 = panel1.CreateGraphics();
if (forma == 1) { g1.FillEllipse(color, e.X, e.Y, dimensionix, dimensioniy); }
if (forma == 2) { g1.FillRectangle(color, e.X, e.Y, dimensionix, dimensioniy); }
if (forma == 3) { g1.FillPie(color, e.X, e.Y, dimensionix, dimensioniy, angoloinizio, angolofine); }
}
}
catch(Exception ecc)
{
MessageBox.Show("Errore: " + "\n" + "\n" + ecc + "\n" + "\n" + "Controllare di aver inserito le dimensioni negli appositi banchi del testo(X e Y)", "Errore", MessageBoxButtons.OK);
}
}
//parte dove gestisco i colori
private void button12_Click(object sender, EventArgs e)
{
OpenFileDialog open=new OpenFileDialog();
open.Filter="BMP image (*.bmp)|*.bmp";
if (open.ShowDialog() == DialogResult.OK)
{
Image im = Image.FromFile(open.FileName);
panel1.BackgroundImage = im;
}
}
private void button13_Click(object sender, EventArgs e)
{
SaveFileDialog salva = new SaveFileDialog();
salva.Filter = "BMP images (*.bmp)|*.bmp";
if (salva.ShowDialog() == DialogResult.OK)
{
try
{
int larghezza = panel1.Width;
int altezza = panel1.Height;
Bitmap immagine = new Bitmap(larghezza, altezza);
Rectangle rettangolo = new Rectangle(0, 0, larghezza, altezza);
panel1.DrawToBitmap(immagine, rettangolo);
immagine.Save(salva.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
}
catch(Exception ecc)
{
MessageBox.Show("Adesso so' cavoli amari: "+ecc,"So' uccelli senza zucchero");
}
}
}
// altri colori
//gestione forme
se qualcuno riesce a risolvermi il problema è un grandissimo perché il salvataggio immagini è l' ultimo tocco che devo dare alla mia calcolatrice (vedrete il perché) prima di pubblicarla su MegaLab.it
p.s.: sarà pubblicata tra poco su http://www.MegaLab.it/7534 =D