png mit transparentem Hintergrund

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    png mit transparentem Hintergrund

    Hallo zusammen.
    Ich habe mit untenstehendem Code eine png Grafik erstellt. wenn ich dies zb. in Word öffne, so ist der Hintergrund transparent.
    Nun wollte ich diese auch in die Zwischenablage kopieren.. macht er zwar, aber der Hintergrund wird dann grau :(
    kann man irgendwie erreichen dass die Transparenz erhalten bleibt ?

    VB.NET-Quellcode

    1. Dim Bipm As New Bitmap(100, 100)
    2. Dim e = Graphics.FromImage(Bipm)
    3. e.FillEllipse(Brushes.Blue, 10, 10, 80, 80)
    4. Clipboard.SetImage(Bipm)
    5. Bipm.Save("C:\Temp\Kreis.png", System.Drawing.Imaging.ImageFormat.Png)



    Gruss Kimo
    @kimo Wenn Du die PNG einer PictureBox mit einem Hintergrundbild zuweist, siehst Du, dass die PNG tatsächlich transparent ist:

    VB.NET-Quellcode

    1. Dim bmp As New Bitmap(100, 100)
    2. Dim g = Graphics.FromImage(bmp)
    3. g.Clear(Color.Transparent)
    4. g.FillEllipse(Brushes.Blue, 10, 10, 80, 80)
    5. Clipboard.SetImage(bmp)
    6. bmp.Save("C:\Temp\Kreis.png", System.Drawing.Imaging.ImageFormat.Png)
    7. Me.PictureBox1.Image = bmp


    Wenn Du die Grafik in Word als die gespeicherte Datei einfügst, ist der Hintergrund transparent.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @kimo Offensichtlich geht in der Zwischenablage Transparenz verloren.
    Probiere das aus, indem Du in Deinem Programm das Bild aus der Zwischenablage holst und darstellst und speicherst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @kimo Füge Deiner GUI einen Button hinzu.
    In der Click-Routine dieses Buttons holst Du den Inhalt der Zwischenablage ab und packst ihn in eine Bitmap-Instanz.
    Diese Bitmap-Instanz kannst Du einer PictureBox als Image zuweisen
    und
    Du kannst sie als Datei speichern.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das Problem mit der Transparenz hatte ich auch schon mal. Du musst das Bild in einen MemoryStream speichern und den dann dann in die Zwischenablage setzen. Die meisten Programme kommen damit klar. Hier als C# Code, wenn du das übersetzen kannst:

    C#-Quellcode

    1. using (MemoryStream ms = new MemoryStream()) {
    2. this.image.Save(ms, ImageFormat.Png);
    3. Clipboard.SetData("PNG", ms);
    4. }
    @Bluespide Genial, eigenartig und inkompatibel.
    Das liegt daran, dass sich in der Zwischenablage kein Bild, sondern ein MemoryStream befindet!

    Spoiler anzeigen

    C#-Quellcode

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. using (Bitmap bmp = new Bitmap(100, 100))
    4. {
    5. Graphics g = Graphics.FromImage(bmp);
    6. g.FillEllipse(Brushes.Red, new Rectangle(20, 20, 60, 60));
    7. //bmp.Save("C:\\Temp\\Test.png", ImageFormat.Png);
    8. using (MemoryStream ms = new MemoryStream())
    9. {
    10. // ist in Word einfügbar, nicht aber in den IrfanView
    11. bmp.Save(ms, ImageFormat.Png);
    12. Clipboard.SetData("PNG", ms);
    13. }
    14. }
    15. }
    16. private void button4_Click(object sender, EventArgs e)
    17. {
    18. object oo = Clipboard.GetData("PNG");
    19. MemoryStream ms = oo as MemoryStream;
    20. Bitmap bmp = new Bitmap(ms);
    21. this.pictureBox1.Image = bmp;
    22. }

    Das Objekt verhält sich in Word anders als ein "normales" Bild, es kann frei auf der ganzen Seite verschoben werden und liegt vor dem Text, der Text hat keine Kenntnis davon.
    In Paint und in den IrfanView kann das Objekt nicht eingefügt werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()