Autor Beitrag
stefanpc81
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 11.04.18 17:49 
Jetzt versuche ich schon einige Zeit damit, folgendes zu realisieren:
In Form1.cs existiert ein Panel (400x400 px) und es soll zur Laufzeit darauf ein weiteres Panel (200x200 px) mit einer darüberliegenden .BMP-Datei erzeugt werden. Auf dem Bitmap soll außerdem eine GDI-Zeichnung gemacht werden.
Die Schwierigkeit besteht darin, dass das Bitmap über seiner Y-Achse hoch und runter bewegt werden kann (Methode Berechne()), d.h. das Bild ist größer als 200x200 px. Wie ich dazu die GDI-Zeichnung optisch trotzdem mittig zum Panel belasse, ist mir klar wie das geht. Außerdem muss das Bild jederzeit in den Hintergrund gelegt werden können (Methode Berechne()). Diese Methode wird alle x sec im Intervall ausgeführt. Letzteres funktioniert schon.
Nun der Code der Methode in Form1.cs:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
        private void Berechne()
        {
            show_ND();
            if (L_main_elec || R_main_elec || battery == "on")
            {
                //Images ausblenden
            }
            else
            {
                //Images einblenden
            }
        }

Wie ich das Bild zur Laufzeit angezeigt bekomme und wie oben beschrieben verändere, ist mir nicht klar geworden. Die Datei würde ich gerne über
ausblenden C#-Quelltext
1:
FileStream datei_ADI_blank = new FileStream(@"..\\images\\ADI_hinten.bmp", FileMode.Open, FileAccess.Read);					

einbinden, aber das geht offenbar nicht. Wer kann mir dazu weiterhelfen?
PS: Ich weiß, es ist vielleicht für einen Anfänger wie mich zu weit fortgeschritten, aber wenn ich das nicht mit Hilfestellungen hinkriege, muss ich mein Projekt beenden bzw. mich mit der HTML/Javascript-Version des Flugsimulators begnügen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 11.04.18 18:02 
Wenn es dir nur um das Einlesen eines Bildes geht, dann kannst du einfach
ausblenden C#-Quelltext
1:
Bitmap bitmap = new Bitmap(path);					

verwenden.

Oder allgemeiner für beliebige Bildformate (BMP, JPG, PNG, ...):
ausblenden C#-Quelltext
1:
Image image = Image.FromFile(path);					
stefanpc81 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 12.04.18 15:56 
Ok, das mit dem Image.FromFile(path) war schon mal hilfreich, danke dafür. Mein Code in Form1.cs für das Bild sieht nun wie folgt aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        public void Create_ADI_hinten_Image()
        {
            Image Img_ADI_hinten = Image.FromFile(@"..\\images\\ADI_hinten.bmp");
            PictureBox picADI_hinten = new PictureBox();
            picADI_hinten.Location = new Point(00);
            picADI_hinten.Size = new Size(200,200);
            picADI_hinten.Image = Img_ADI_hinten;
            panel_ADI.Controls.Add(picADI_hinten);
        }

Das Image ist mit 200x400 px größer als die PictureBox "picADI_hinten". Wie kann ich ohne Maussteuerung, also vielmehr mit der Methode Berechne(), das Image innerhalb der PictureBox verschieben (nur in Y-Richtung)? d.h. es soll ein anderer Bereich des Image sichtbar werden.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 12.04.18 16:20 
Dafür wirst du selber auf das Panel zeichnen müssen, s. Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) (schau dir dann die verschiedenen Überladungen der Graphics.DrawImage-Methode an).

Mittels panel.Invalidate() kannst du dann die Aktualisierung (nachdem du die Berechnung ausgeführt hast) durchführen lassen.

PS: Die PictureBox brauchst du dann nicht mehr.