2012-04-18 14 views
5

मैं एक प्रोग्राम बनाना चाहता हूं जो एक पीएनजी में पीएनजी छवियों को विलय करता है। सभी छवियां 78 पीएक्स ऊंचाई, 120 पीएक्स चौड़ाई है, इसलिए मैंने बिटमैप 1200x78 बनाया है (मुझे 10 छवियों को मर्ज करने की आवश्यकता है) यह विलीन हो जाता है, लेकिन परिणामस्वरूप प्रत्येक छवि पीएनजी लगभग x2 स्केल की जाती है। क्यूं कर?ग्राफिक्स पर चित्रित करते समय .NET स्केल छवि

यहाँ मेरी कोड है:

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

मैं अपने कोड दौड़ा लिए अपना कोड अपडेट की कोशिश करो और यह ठीक काम करने लगता है। क्या आप अपनी इनपुट छवियों में से एक संलग्न कर सकते हैं? मुझे लगता है कि यह आपकी छवियों के साथ डीपीआई या एक जैसे के संबंध में एक मुद्दा है। – Till

+0

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

उत्तर

3

इस

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

धन्यवाद बहुत, आयताकार मदद की, लेकिन तीसरा पैरामीटर चौड़ाई है इसलिए यह शिफ्ट के बिना केवल 120 होना चाहिए। ग्राफिक्स। ड्रॉ इमेज (छवि, नया आयताकार (शिफ्ट, 0,120,78)); –

+0

मैं इसे संपादित करता हूं, इसलिए इसे उत्तर के रूप में चिह्नित करें – Likurg

1

ऐसा लगता है कि यह आपके के आकार के चित्र अनुकूल करने के लिए प्रयास करें "गुलाबी कुत्ते: पी" छवि। जब आप पृष्ठभूमि के साथ छवि को भरते हैं तो इसका परिणाम अलग-अलग होता है। इस देखें:

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

हां, तो समस्या अपने चित्र के अदृश्य पृष्ठभूमि में हो रहा है।

+2

यदि आप एक रंग से भरे आयताकारों का उपयोग कर रहे हैं तो आप अपने उदाहरण कैसे काम करते हैं ? :) आप 0,0 पर एक आयताकार चित्रित कर रहे हैं, जिसे 120 से 240 तक आकार दिया गया है, आप 120 पर अपना अगला आयताकार चित्रित कर रहे हैं, इसलिए यह पहले आकार के आयत के हिस्से को ओवरलैप करता है और इसी तरह;) –

+0

मेरी जांच करें संपादित टिप्पणी :) –

+0

मेरा संपादन उत्तर देखें – MarcoM

संबंधित मुद्दे