Question

J'écris un moteur de sprite CSS en C #, mais je rencontre quelques problèmes. Je crée l'image principale, définit toutes les propriétés sur celle-ci, puis itère les sprites et les dessine sur l'image principale. Cependant, lorsque je viens d'enregistrer l'image principale, celle-ci ne semble être que l'image principale vide avec un fond transparent et aucun des sprites . Je suis très confus au point où je me trompe.

Le code que j'utilise est le suivant:

    // Work out the width/height required
    int max_width = 0;
    int max_height = 0;

    foreach(SpriteInformation sprite in sprites) {
        if (max_width < (sprite.Left + greatest_width)) max_width = sprite.Left + greatest_width;
        if (max_height < (sprite.Top + greatest_height)) max_height = sprite.Top + greatest_height;
    }

    // Create new master bitmap
    Bitmap bitmap = new Bitmap(max_width,max_height,PixelFormat.Format32bppArgb);
    Graphics graphics = Graphics.FromImage(bitmap);

    // Set background color
    SolidBrush brush;

    if (cbxBackground.Checked) {
        if (txtColor.Text == "") {
            brush = new SolidBrush(Color.Black);
        } else {
            brush = new SolidBrush(pnlColor.BackColor);
        }
    } else {
        if (txtColor.Text == "") {
            brush = new SolidBrush(Color.White);
        } else {
            brush = new SolidBrush(pnlColor.BackColor);
        }
    }

    //graphics.FillRectangle(brush,0,0,bitmap.Width,bitmap.Height);
    bitmap.MakeTransparent(brush.Color);
    graphics.Clear(brush.Color);

    // Copy images into place
    ImageAttributes attr = new ImageAttributes();

    //attr.SetColorKey(brush.Color,brush.Color);

    foreach(SpriteInformation sprite in sprites) {
        Rectangle source = new Rectangle(0,0,sprite.Width,sprite.Height);
        Rectangle dest = new Rectangle(sprite.Left,sprite.Top,sprite.Width,sprite.Height);

        graphics.DrawImage(sprite.Sprite,dest,0,0,sprite.Width,sprite.Height,GraphicsUnit.Pixel,attr);
    }

    // Save image
    string format = ddlFormat.Items[ddlFormat.SelectedIndex].ToString();

    if (format == "PNG") {
        dlgSave.Filter = "PNG Images|*.png|All Files|*.*";
        dlgSave.DefaultExt = ",png";

        if (dlgSave.ShowDialog() == DialogResult.OK) {
            bitmap.Save(dlgSave.FileName,ImageFormat.Png);
        }
    } else if (format == "JPEG") {

    } else {

    }
Était-ce utile?

La solution

Que sont sprite.Left et Top? S'ils ne sont pas 0, cela peut poser problème. Je pense que vous avez choisi la source et l’inverse?

http://msdn.microsoft.com/en-us/library /ms142045.aspx

Essayez une variante DrawImage plus simple si ce n’est déjà fait. par exemple. DrawImage (sprite.Sprite, 0,0)

Autres conseils

Vous dessinez dans "graphiques", puis vous enregistrez "bitmap"? Je ne suis pas sûr que ces graphiques fonctionnent en interne avec votre "bitmap" d'origine. objet ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top