Entwickler-Ecke

Multimedia / Grafik - Transparenz aus PNG löschen


Mile1975! - Fr 09.09.22 07:15
Titel: Transparenz aus PNG löschen
Guten Tag,

ich erstelle gerade ein kleines Tool, womit ich PNG - Dateien laden möchte, anzeigen und wenn es sein muss, die Transparenz entferne und gegen einen weißen Hintergrund austauschen möchte. Wenn ich die Datei als JPG speichere, macht das Programm das auch. Allerdings ist der HG mal weiß, mal schwarz. Ich weiß nicht, ob ich falsch gesucht habe, aber ich habe nicht wirklich was Brauchbares gefunden, wo ich mit umgehen könnte.

Vielleicht hat ja jemand eine Lösung oder zumindest einen Tipp, wo ich noch suchen könnte.

Hier einmal der Code zum Programm.

1 x PictureBox
4 x Buttons


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:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace Lemke_ImageConv
{
    public partial class Form1 : For
    {
        Image file;
        Boolean opened = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Text = "Lemke - ImageConv";
        }

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

            if(dr == DialogResult.OK)
            {
                file = Image.FromFile(openFileDialog1.FileName);
                pb_image.Image = file;
                opened = true;
            }
        }

    //Programm beenden
        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }

    //Bild als jpg laden
        private void btnConvert_Click(object sender, EventArgs e)
        {
            DialogResult dr = saveFileDialog1.ShowDialog();

            if (dr == DialogResult.OK)
            {
                if (opened)
                {
                    if(saveFileDialog1.FileName.Substring(saveFileDialog1.FileName.Length - 3).ToLower() == "jpg")
                    {
                        file.Save(saveFileDialog1.FileName, ImageFormat.Jpeg);
                    }
                }
                else
                {
                    MessageBox.Show("Bitte erst ein Bild laden!");
                }
            }
        }

    //Transparenz entfernen und gegen weiß ersetzen
        private void btnHGW_Click(object sender, EventArgs e)
        {
           //ToDo: Hier der Code für Transparenz weg und HG weiß hinzugefügt.
        }

    }
}


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Fr 09.09.2022 um 09:21
Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt


jaenicke - Fr 09.09.22 08:57

Hallo und :welcome:

Erstelle dir ein neues Bild (new Bitmap(Größe, ...), FromImage [https://docs.microsoft.com/de-de/dotnet/api/system.drawing.graphics.fromimage]), fülle es komplett mit der gewünschten Hintergrundfarbe (Clear [https://docs.microsoft.com/de-de/dotnet/api/system.drawing.graphics.clear]) und zeichne dein Bild darüber (DrawImageUnscaled [https://docs.microsoft.com/de-de/dotnet/api/system.drawing.graphics.drawimageunscaled]). Dann kannst du das neue Bild speichern.

Ob man den Alphakanal auch direkt entfernen kann, weiß ich nicht.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Mile1975! - Fr 09.09.22 09:15

Vielen Dank für die Antwort. Das werde ich heute Nachmittag direkt mal probieren...
Gr. Micha


Mile1975! - Di 13.09.22 17:09

user profile iconMile1975! hat folgendes geschrieben Zum zitierten Posting springen:
Vielen Dank für die Antwort. Das werde ich heute Nachmittag direkt mal probieren...
Gr. Micha


Noch in Arbeit.. 13.09.22