代码之家  ›  专栏  ›  技术社区  ›  Lloyd

绘制透明图像

  •  0
  • Lloyd  · 技术社区  · 15 年前

    sprites 然后把它们画到主图像上。然而,当我来保存主图像时,它看起来只是一个带有透明背景的空主图像,并且没有任何 精灵

    我使用的代码是:

        // 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 {
    
        }
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   Kothar    15 年前

    什么是雪碧,左边和上面?如果它们不是0,那可能是个问题。我想你的目的地和来源都错了?

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

    例如 DrawImage(sprite.Sprite,0,0)

        2
  •  -1
  •   jishi    15 年前