Zapis obrazka ze schowka

0

Witam.

Cały dzień już dzisiaj to męczę.
Potrzebuje napisać program który z wycinków obrazu zapisze mi go do plików.
TZN. programem(Pickpick) robię zrzut wycinka obrazu. I chciałbym to zapisać do pliku.

Ostatecznie co znalazłem to

if (Clipboard.GetDataObject() != null)
                        {
                            IDataObject data = Clipboard.GetDataObject();

                            if (data.GetDataPresent(DataFormats.Bitmap))
                            {
                                Image image = (Image)data.GetData(DataFormats.Bitmap, true);

                                image.Save("image.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                                image.Save("image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                                image.Save("image.gif", System.Drawing.Imaging.ImageFormat.Gif);
                            }
 

Niestety nie działa.

błąd:
An exception of type 'System.InvalidCastException' occurred in "xxx" but was not handled in user code

Additional information: Nie można rzutować obiektu typu 'System.Windows.Interop.InteropBitmap' na typ 'System.Drawing.Image'.

1

Zamiast:

Clipboard.GetDataObject() 

spróbuj wykorzystać

 Clipboard.GetImage()
  • zwraca bodajże nam bitmapę. Piszę z pamięci więc mogę się mylić.
0

No tak masz racje ale jak tą bitmapę zapisać

1

Klasa Bitmap dziedziczy po klasie abstrakcyjnej Image, więc możesz wykorzystać tą samą metodę zapisu, którą wykorzystujesz.

0

Dzięki.
Wydumałem takie cos.

  private void SaveClipboar(string fp)
        {
            var image = Clipboard.GetImage();
            using (var fileStream = new FileStream(fp+"/asd.png", FileMode.Create))
            {
                System.Windows.Media.Imaging.BitmapEncoder encoder = new System.Windows.Media.Imaging.PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(image));
                encoder.Save(fileStream);
            }
        }
 

Czy mógłby ktoś sprawdzić czy u niego też zapis do Png nie działa.
JPEG i BMP działa a mi trzeba png.
i jak to naprawić

1

oO

https://msdn.microsoft.com/pl-pl/library/9t4syfhh%28v=VS.110%29.aspx

aż sobie sprawdziłem i działa.

            if (Clipboard.ContainsImage())
                using (Image img = Clipboard.GetImage())
                    img.Save(@"D:\test.png", System.Drawing.Imaging.ImageFormat.Png);
0

Error 1 Cannot implicitly convert type 'System.Windows.Media.Imaging.BitmapSource' to 'System.Drawing.Image' Daje mi takim błędem

1
private void button_Click(object sender, RoutedEventArgs e)
        {
            if (Clipboard.ContainsImage())
                using (System.Drawing.Image img = this.BitmapFromSource(Clipboard.GetImage()))
                    img.Save(@"D:\test.png", System.Drawing.Imaging.ImageFormat.Png);
        }

        public Bitmap BitmapFromSource(System.Windows.Media.Imaging.BitmapSource bitmapsource)
        {
            //convert image format
            var src = new System.Windows.Media.Imaging.FormatConvertedBitmap();
            src.BeginInit();
            src.Source = bitmapsource;
            src.DestinationFormat = System.Windows.Media.PixelFormats.Bgra32;
            src.EndInit();

            //copy to bitmap
            Bitmap bitmap = new Bitmap(src.PixelWidth, src.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            var data = bitmap.LockBits(new Rectangle(System.Drawing.Point.Empty, bitmap.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            src.CopyPixels(System.Windows.Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride);
            bitmap.UnlockBits(data);

            return bitmap;
        }

nie zauważyłem, że wpf. sprawdziłem kilka rozwiązań z google, takie zadziałało pierwsze :)

http://stackoverflow.com/questions/3751715/convert-bitmapsource-to-image

0

Fakt nie ma błędu ale plik po "otwarciu" jest nie do odczytu chociaż dane w nim są

1

to nie wiem, kombinuj. Ja skopiowałem obrazek z avatara mojego i zapisało i działa, albo daj obrazek na którym nie działa.

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