2012-04-18 11 views
5

Voglio creare un programma che unisca le immagini png in una png. Tutte le immagini sono 78px height, 120px width, quindi ho creato una bitmap 1200x78 (ho bisogno di unire 10 immagini) Si fonde, ma ogni immagine nel risultato png è ridimensionata di circa x2. Perché?.NET ridimensiona l'immagine quando si disegna nella grafica

Ecco il mio codice:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Security; 
using System.Drawing.Imaging; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     OpenFileDialog openFileDialog1; 
     Bitmap bitmap; 

     public Form1() 
     { 
      InitializeComponent(); 
      openFileDialog1 = new OpenFileDialog(); 
      openFileDialog1.Multiselect = true; 
      openFileDialog1.Filter = 
     "Images (*.PNG;*.JPG;*.GIF)|*.PNG;*.JPG;*.GIF|" + 
     "All files (*.*)|*.*"; 
      openFileDialog1.Title = "Select images to merge"; 

      bitmap = new Bitmap(1200, 78); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      DialogResult dr = this.openFileDialog1.ShowDialog(); 

      if (dr == System.Windows.Forms.DialogResult.OK) 
      { 
       // Read the files 
       int shift = 0; 
       foreach (String file in openFileDialog1.FileNames) 
       { 
        // Create a PictureBox. 
        try 
        { 
         PictureBox pb = new PictureBox(); 
         Image loadedImage = Image.FromFile(file); 
         pb.Height = loadedImage.Height; 
         pb.Width = loadedImage.Width; 
         pb.Image = loadedImage; 
         flowLayoutPanel2.Controls.Add(pb); 

         paintToBitmap(loadedImage, shift); 

         shift += loadedImage.Width; 
        } 
        catch (SecurityException ex) 
        { 
         // The user lacks appropriate permissions to read files, discover paths, etc. 
         MessageBox.Show("Security error\n\n" + 
          "Error message: " + ex.Message + "\n\n" + 
          "Details (send to Support):\n\n" + ex.StackTrace 
         ); 
        } 
        catch (Exception ex) 
        { 
         // Could not load the image - probably related to Windows file system permissions. 
         MessageBox.Show("!!!"); 
        } 
       } 


       saveImage(); 
      } 
     } 

     private void paintToBitmap(Image image, int shift) 
     {   
      Graphics graphics = Graphics.FromImage(bitmap); 
      graphics.DrawImage(image, new Point(shift, 0)); 
     } 

     private void saveImage() 
     { 
      bitmap.Save("d:\\result.png", System.Drawing.Imaging.ImageFormat.Png); 
     } 

     private void flowLayoutPanel2_Paint(object sender, PaintEventArgs e) 
     { 

     } 
    } 
} 
+0

ho eseguito il codice e sembra funzionare bene. Potresti allegare una delle tue immagini di input? Immagino che questo sia un problema con le tue immagini rispetto a dpi o simili. – Till

+0

http://files.moonmana.com/forums/m1.png http://files.moonmana.com/forums/m2.png –

risposta

3

Prova aggiornare il codice per questo

graphics.DrawImage(image, new Rectangle(shift, 0,120,78)); 
+0

Grazie mille, il rettangolo è stato utile, ma il terzo parametro è largo quindi dovrebbe essere solo 120, senza maiusc. graphics.DrawImage (image, new Rectangle (shift, 0,120,78)); –

+0

L'ho modificato, quindi contrassegnalo per favore come risposta – Likurg

1

Sembra che cercare di adattare l'immagine alle dimensioni del vostro "cane rosa: P" immagine. Quando si riempie l'immagine con uno sfondo, il risultato è diverso. vedere questo:

http://i.stack.imgur.com/3eVEu.png http://i.stack.imgur.com/DaygF.png http://i.stack.imgur.com/xwEve.png

così, il problema sembra essere in background invisibile della vostra immagine.

+2

Come sai che il tuo esempio funziona se stai usando rettangoli riempiti con un colore ? :) Stai disegnando un rettangolo a 0,0 è disegnato ridimensionato da 120 a 240, che stai disegnando il tuo prossimo rettangolo a 120, quindi si sovrappone a una parte del primo rettangolo ridimensionato e così via;) –

+0

controlla il mio commento modificato :) –

+0

vedere la mia risposta di modifica – MarcoM

Problemi correlati