Nieprawidłowy zapis bitmapy za pomocą Graphics

Odpowiedz Nowy wątek
2015-02-18 10:11
0

Wczytuję do programu BitmapImage:

 fullBitmapImage = new BitmapImage(new Uri(@"../Assets/ControlImages/Bar/Bar_full.png", UriKind.Relative));

Potem wywołuje tą metodę :

         private unsafe void SetBarImageCorrect()
        {
            Bitmap toRetBitmap=new System.Drawing.Bitmap(fullBitmapImage.PixelWidth,fullBitmapImage.PixelHeight,PixelFormat.Format32bppArgb);
            Graphics g = Graphics.FromImage(toRetBitmap);
            g.Clear(System.Drawing.Color.Transparent);
           // Bitmap halfBitmap0=BitmapImage2Bitmap()
           // Bitmap halfBitmap = BitmapImage2Bitmap(emptyBitmapImage);
            //halfBitmap=halfBitmap.Clone(new System.Drawing.Rectangle(0, 0, halfBitmap.Width/2, halfBitmap.Height), halfBitmap.PixelFormat);
            g.DrawImage(BitmapImage2Bitmap(fullBitmapImage),0,0);
            //g.DrawImage(halfBitmap,(int)emptyBitmapImage.PixelWidth/2,0);
            //BarImg.Source = Bitmap2BitmapImage(toRetBitmap);
            // Bitmap toSaveBitmap=new Bitmap((int)emptyBitmapImage.Width,(int)emptyBitmapImage.Height,g);
            toRetBitmap.Save("test.png",ImageFormat.Png);
        }
...
        private Bitmap BitmapImage2Bitmap(BitmapImage bitmapImage)
        {
            using (MemoryStream outStream = new MemoryStream())
            {
                BitmapEncoder enc = new BmpBitmapEncoder();
                enc.Frames.Add(BitmapFrame.Create(bitmapImage));
                enc.Save(outStream);
                System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream);

                return new Bitmap(bitmap);
            }
        }

Nie wiem czemu po zapisie obrazu do pliku nie jest zachowany kanał alfa, zamiast przeźroczystości mam białe paski, a dodatkowo jak widać na poniższym obrazku kolory oryginalnego paska są inne.
Oryginał: user image
Po zapisaniu: user image

Pozostało 580 znaków

2015-02-18 10:39
0

Sprawdź to: http://stackoverflow.com/ques[...]ansparancy-doesnt-save-in-png

Pozostało 580 znaków

2015-02-18 13:56
0

Program nie wiem czemu się zawiesza gdy próbuje podmienić źródło obrazka BarImg, jeżeli chce zapisać toRetBitmap to operacja się udaje, próbowałem wczytać ten plik już przetworzony ale to samo się dzieje, program się zawiersza i jest exception mojej kontrolki bez żadnych szczegółów o błędzie

 private unsafe void SetBarImageCorrect()
        {
            toRetBitmap=new Bitmap(testImage.Width,testImage.Height,testImage.PixelFormat);
            Graphics g = Graphics.FromImage(toRetBitmap);
            g.DrawImage(testImage,new System.Drawing.Rectangle(0,0,testImage.Width/2,testImage.Height));
            g.DrawImage(testImage2,new System.Drawing.Rectangle(testImage.Width/2,0,testImage.Width,testImage.Height));
            helpImage = Bitmap2BitmapImage(toRetBitmap); 
            BarImg.Source = helpImage;
        } 

Zauważyłem też że, ten obrazek który tworzę w programie jeśli się go zapisze, to w przeciwieństwie do tych stworzonych w PS nie ma jego podglądu jak wygląda w folderze.

edytowany 2x, ostatnio: kolarz3, 2015-02-18 14:01
czym jest BarImg? - Azarien 2015-02-18 14:10

Pozostało 580 znaków

2015-02-18 14:27
0

Już sobie poradziłem, okazało się że, funkcja Bitmap2BitmapImage którą znalazłem gdzieś w necie nie była przystosowana do obrazów z przeźroczystością

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0