2012-04-18 10 views
5

Quiero hacer un programa que combine imágenes png en una png. Todas las imágenes tienen 78px de alto, 120px de ancho, así que creé un mapa de bits 1200x78 (necesito unir 10 imágenes) Se fusiona, pero cada imagen en el resultado png se escala aproximadamente x2. ¿Por qué?.NET escala la imagen al dibujar en gráficos

Aquí está mi código:

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

me encontré con su código y parece que funciona bien. ¿Podría adjuntar una de sus imágenes de entrada? Supongo que este es un problema con sus imágenes con respecto a dpi o similar. – Till

+0

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

Respuesta

3

Trate actualizar el código a este

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

Muchas gracias, rectángulo ayudado, pero el tercer parámetro es el ancho por lo que debería ser de 120, sin cambio. graphics.DrawImage (image, new Rectangle (shift, 0,120,78)); –

+0

Lo edito, así que marca esto como respuesta – Likurg

1

Parece que tratan de adaptar la imagen al tamaño de su "perro rosado: P" de la imagen. Cuando llenas la imagen con un fondo, resulta de otra manera. ver esto:

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

así, el problema parece estar en el fondo invisible de su imagen.

+2

¿Cómo sabes que tu ejemplo funciona si estás utilizando rectángulos rellenos con un color ? :) Está dibujando un rectángulo a 0,0, dibujado, redimensionado de 120 a 240, que está dibujando su próximo rectángulo en 120, por lo que se superpone a una parte del primer rectángulo redimensionado y así sucesivamente;) –

+0

revise mi comentario editado :) –

+0

ver mi respuesta de edición – MarcoM

Cuestiones relacionadas