Autor Beitrag
Daniel002
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 03.02.10 13:56 
Hallo,
vielleicht als erstes zu erwähnen, habe nur etwas Erfahrungen mit Java, C und Visual Basic. Bin also neu auf dem Gebiet C# - scheint aber eine geniale Sprache zu sein.

Ich möchte zwei Bilder in eine Picturebox laden, dass zweite Bild soll über dem anderen bei einer bestimmten Position liegen.

pictureBox1.Load("c:\\1.JPG");

So lade ich ja ein Bild, sobald ich aber das zweite Lade wird dieses erste ersetzt.

Dieses neue Bild möchte ich dann später abspeichern, jedoch erstmal zum ersten Problem das ich die beiden in ein Fenster bekomme.

Vielen dank.
Mit freundlichen Grüßen
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mi 03.02.10 14:50 
Hallo und :welcome:,

wenn du das neue Bild später wegspeichern willst ist es wohl am einfachst du erstellst ein neues Bild und malst dann die zwei vorhanden Bildern drauf. Hier im Forum wurde die Vorgehensweise schön öfters Diskutiert - einfach mal die Suche verwenden.

Prinzipiell aber etwas in dieser Form:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Image image1 = Bitmap.FromFile("blub");
Image image2 = Bitmap.FromFile("blub");
Image newPicture = new Bitmap(Math.Max(image1.Width, image2.Width), Math.Max(image1.Height, image2.Height));

Graphics graphic = Graphics.FromImage(newPicture);
graphic.DrawImage(image1)
graphic.DrawImage(image2, new Rectangle(20,20, image2.Width, Image2.Height));

pictureBox1.Image = newPicture;
pictureBox1.Refresh();


So mal aus dem Kopf....

Gruß Daniel
Daniel002 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 03.02.10 16:38 
Hallo,
danke schön für die Hilfe, bis schon ein Stück weiter gekommen (dank deiner Hilfe),
das Problem ist bei mir nun ein neues, wie schaffe ich es mehrere Dateien die ich im OpenFileDialog auswähle in eine Listbox abzuspeichern, diese dann für das Bild jeweils zu verwenden.

Ich kopiere mal den Quelltext hier rein, an den Stellen wo ich nicht weiter komme habe ich ein Kommentar eingefügt:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
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;

namespace BildEditor
{
    public partial class Form1 : Form
    {
        List<string> _items = new List<string>();

        public Form1()
        {
            InitializeComponent();
            listBox1.DataSource = _items;
        }

        public void button1_Click_1(object sender, EventArgs e)
        {

            string Pfad = string.Empty;

            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Multiselect = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
                Pfad = openFileDialog1.FileName;

            _items.Add(Pfad); // <-- Das Problem ist, er fügt bei vielen ausgewählen Dateien nur ein Pfad in die Listbox
            listBox1.DataSource = null;
            listBox1.DataSource = _items;


        }

        public void button2_Click(object sender, EventArgs e)
        {
            Image image1 = Bitmap.FromFile("c:\\15.JPG"); // <--hier
            Image image2 = Bitmap.FromFile("c:\\15.JPG"); // <-- und hier sollen dann später die selectierten Daten eingefügt werden 
            Image newPicture = new Bitmap(Math.Max(image1.Width, image2.Width), Math.Max(image1.Height, image2.Height));

            Graphics graphic = Graphics.FromImage(newPicture);
            graphic.DrawImage(image1, new Rectangle(1010, image1.Width, image1.Height));
            graphic.DrawImage(image2, new Rectangle(400200, image2.Width, image2.Height));

            pictureBox1.Image = newPicture;
            pictureBox1.Refresh();
        }

    }
}
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 03.02.10 16:46 
Hallo und noch :welcome:

Der Punkt "OpenFileDialog-Elemente in ListBox übertragen" hat nichts zu tun mit "Zwei Bilder in eine PictureBox laden" und gehört auch nicht in das Unterforum Multimedia/Grafik.

Die neue Frage steht zwar für dich im selben Zusammenhang, nämlich deiner Anwendung, bezieht sich aber auf völlig verschiedene NET-Klassen.

Damit die Suche und künftige Leser nicht durcheinander kommen, solltest du diese Frage hier abschließen und im richtigen Unterforum "WinForms" neu stellen.

Gruß Jürgen
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mi 03.02.10 17:08 
JüTho hat natürlich recht.

Dennoch gebe ich mal einen Allgemeinen Tipp. VisualStudio bietet dir objekt-abhängige IntelliSense d.h. wenn du eine Instanz des OpenFileDialog hast (bei dir openFileDialog1) und das in deinen Code schreibst und danach einen "." eintippst, öffnen sich die IntelliSense (oder mit Ctr+Leertaste). Dort bekommst du wie gesagt objekt-abhängige Methoden, Properties und Events angeboten, sowie eine kurze Doku dazu. Dies Hilf meinstes die gewünschten Eigenschaften zu finden. Ansonsten ist die MSDN Homepage immer eine gute anlaufe stelle...

Und überleg dir nochmal genau wie groß dein neues Bild sein soll. Mein Code war nur ein Denkanstoß...

Wenn du dein OpenFileDialog als Member deklarierst kannst du in der Button2_Click Methode darauf zugreifen. Den Rest der Funktionalität solltest du mindestens in eine Methode, wenn nicht gar in eine Klasse packen.

Könnte dann so aussehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 public void button2_Click(object sender, EventArgs e)
        {
if (openFileDialog1.FileNames.Length != 2)
{
  // Fehler-Handling
  return;
}
   pictureBox1.Image = MergeImage(openFileDialog1.FileNames[0], openFileDialog1.FileNames[1]);
  pictureBox1.Refresh();
}


Gruß Daniel
Daniel002 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 09.02.10 17:50 
Hallo,

so ich bin jetzt eigentlich soweit. Doch es tauchen bei einigen Bildern immer wieder kleine Fehler auf, ich bin etwas verwundert.
Hier einmal der Programmcode:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
                String y = Convert.ToString(listBox1.SelectedValue);
                Image image1 = Bitmap.FromFile(y);


                Image image2 = Bitmap.FromFile("c:\\15.JPG");
                Image newPicture = new Bitmap(Math.Max(image1.Width, image1.Width), Math.Max(image1.Height, image1.Height));

                Graphics graphic = Graphics.FromImage(newPicture);
                graphic.DrawImage(image1, new Rectangle(00, image1.Width, image1.Height));

                graphic.DrawImage(image2, new Rectangle(image1.Height - image2.Height, image1.Width - image2.Width, image2.Width, image2.Width));


                pictureBox1.Image = newPicture;
                pictureBox1.Refresh();

                String a1 = Convert.ToString(listBox1.SelectedItem);
                DirectoryInfo directory = new DirectoryInfo(a1);

                String a2 = Convert.ToString(directory.Name);
                pictureBox1.Image.Save("C:\\test\\"+a2);




Das Image2 soll rechts unten in der Ecke vom Image1 auftauchen, kommt auch oft vor, manchmal gar nicht oder total versetzt. Was ist falsch?

Mit freundlichen Grüßen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 09.02.10 18:54 
user profile iconDaniel002 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
Math.Max(image1.Width, image1.Width)					
:?:

user profile iconDaniel002 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
new Rectangle(image1.Height - image2.Height, image1.Width - image2.Width, image2.Width, image2.Width)					
Die ersten zwei Parameter würde ich umdrehen und mir über den letzten nochmal Gedanken machen.

_________________
>λ=
Daniel002 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 09.02.10 19:24 
Ach, ich depp. Ja jetzt wunderbar. Danke schön.