2017-03-01 2 views
0

Ich habe online Code gefunden, um Bilder zusammenzuführen. Ich habe es aufgebaut und ausgearbeitet. Ich habe es endlich zur Arbeit gebracht, aber die Bilder, die ich mit dem leeren Bild verschmilze, sind nicht zentriert.Wie zentriere ich ein Bild, wenn ich es mit einem anderen Bild zusammenführe?

Hier ist die, wie es aussieht: enter image description here

Hier ist mein Code:

public partial class Form1 : Form 
{ 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void label1_Click(object sender, EventArgs e) 
    { 

    } 

    private void btnSelectImage_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog openFileDialog = new OpenFileDialog(); 
     openFileDialog.InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments); 
     openFileDialog.Filter = "Images (*.jpg, *.jpeg, *.png)|*.*"; 
     openFileDialog.FilterIndex = 1; 

     if (openFileDialog.ShowDialog() == DialogResult.OK) 
     { 
      txtFileLoc.Text = openFileDialog.FileName; 
      System.Drawing.Image img = System.Drawing.Image.FromFile(txtFileLoc.Text); 
      txtImgWidth.Text = img.Width.ToString(); 
      txtImgHeight.Text = img.Height.ToString(); 
     } 


    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     using (var fbd = new FolderBrowserDialog()) 
     { 
      DialogResult result = fbd.ShowDialog(); 

      if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath)) 
      { 
       txtOutputPath.Text = fbd.SelectedPath; 
       //string[] files = System.IO.Directory.GetFiles(fbd.SelectedPath); 
       //System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToString(), "Message"); 
      } 
     } 
    } 

    private void btnResize_Click(object sender, EventArgs e) 
    { 
     DateTime time = DateTime.Now; 
     string format = "MMMddyyy"; 
     string imgdate = time.ToString(format); 
     int Height = Convert.ToInt32(txtNewHeight.Text); 
     int Width = Convert.ToInt32(txtNewWidth.Text); 
     Image resultImage = new Bitmap(Height, Width, PixelFormat.Format24bppRgb); 

     using (Graphics grp = Graphics.FromImage(resultImage)) 
     { 
      grp.FillRectangle(
       Brushes.White, 0, 0, Width, Height); 
      resultImage.Save(txtOutputPath.Text + @"\" + imgdate + ".jpeg", System.Drawing.Imaging.ImageFormat.Jpeg); 
      Image img = Image.FromFile(txtFileLoc.Text); 

     } 
     Image playbutton; 
     try 
     { 
      playbutton = Image.FromFile(txtFileLoc.Text); 
     } 
     catch (Exception ex) 
     { 
      return; 
     } 

     Image frame; 
     try 
     { 
      frame = resultImage; 
     } 
     catch (Exception ex) 
     { 
      return; 
     } 

     using (frame) 
     { 
      using (var bitmap = new Bitmap(Width, Height)) 
      { 
       using (var canvas = Graphics.FromImage(bitmap)) 
       { 
        canvas.InterpolationMode = InterpolationMode.HighQualityBicubic; 
        canvas.DrawImage(frame, 
            new Rectangle(0, 
                0, 
               Width, 
              Height), 
            new Rectangle(0, 
                0, 
                frame.Width, 
                frame.Height), 
            GraphicsUnit.Pixel); 
        canvas.DrawImage(playbutton, 
            (bitmap.Width/2) - (playbutton.Width/2), 
            (bitmap.Height/2) - (playbutton.Height/2)); 
        canvas.Save(); 
       } 
       try 
       { 
        bitmap.Save(txtOutputPath.Text + @"\" + imgdate + ".png", System.Drawing.Imaging.ImageFormat.Png); 
       } 
       catch (Exception ex) { } 
      } 
     } 
    } 
} 
+0

a) Zentrierung als solche ist nur sehr einfache Mathematik ..aber .. b) stellen Sie sicher, dass beide Bilder die gleichen dpi-Einstellungen haben !!! – TaW

Antwort

0

Um ein Bild zu zentrieren, wenn auf einem anderen Bild zeichnen Sie die Position eines berechnen müssen Bild (X, Y), die wie folgt durchgeführt werden kann:

int x = (bitmap.Width - image.Width)/2; 
int x = (bitmap.Height - image.Height)/2; 

Dann können Sie einfach mit

Ihr Bild zeichnen
canvas.DrawImage(image, x, y, image.Width, image.Height); 

Beachten Sie, dass Sie mit diesem Ansatz ein Bild zentrieren können, unabhängig davon, ob es kleiner als die ursprüngliche Bitmap oder größer ist. Bei der Berechnung von (X, Y) kann eine Rundungsungleichmässigkeit von einem Pixel auftreten, so dass es vorteilhaft wäre, Math.Round zu verwenden, um das zu korrigieren.

+0

Ich schätze die schnelle Antwort! Es hat perfekt funktioniert. Vielen Dank. –

Verwandte Themen