none
C# 關於自動儲存影像到指定資料夾 RRS feed

  • 問題

  • 各位好~

    目前在做Kinect的影像相關

    由於是在WPF上面做開發的原始檔

    只有image 可用 沒有picturebox的控鍵

    現在想要把 Kinect所擷取到的當前影像 自動存檔 在去做處理(想要達到realtime

    GOOGLE了一段時間 都沒找到想要的資料 都是手動"點擊按鈕" 才能做到截圖


    問題在於

    如何在WPF介面下 儲存檔案到指定資料夾

    自動的話 可以用到timer的方式去補強

    但是"儲存到指定資料夾"的方式 在WPF上面 不知道該如何使用

    小弟的WPF主視窗的影像源如下

    byte[] coloredFrame = GenerateColoredBytes(data);

    image1.Source = BitmapSource.Create(
                        data.Width, data.Height, 96, 96, PixelFormats.Bgr32,
                        null, coloredFrame, data.Width * PixelFormats.Bgr32.BitsPerPixel / 8
                    );

    希望可以儲存成bitmap類型的檔案 到指定的資料夾 做運算

    懇請各位大大指點迷津一下 >"<


    2013年4月22日 下午 03:42

解答

所有回覆

  • 您好

    請先參考先前的發問

    關於利用 Kinect 自動拍照


    歡迎參觀我的Blog【菜鳥自救會】
    微軟實戰課程日

    • 已標示為解答 甜不辣 2013年4月23日 上午 03:03
    2013年4月22日 下午 03:59
    版主
  • 哦哦~ 太感謝了!!

    感謝小歐大大~

    拜讀您不少文章 都很有助益 最後竟然還是由小歐大大幫忙解答了 感謝

    以下為照著小歐大大提供的文章的解決方法

    //載入WPF視窗時 開啟 DispatcherTimer 的時間控制元件(WPF沒有Timer控鍵 DispatcherTimer這控鍵寫在System.Windows.Threading)

    private void Window_Loaded(object sender, RoutedEventArgs e)

    {

        DispatcherTimer dispatcherTimer = new DispatcherTimer();

        dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);

        dispatcherTimer.Interval = new TimeSpan(0, 0, 1);                 //最後一個是秒為單位

        dispatcherTimer.Start();

    }

    //儲存WPF視窗影像

    //設定儲存檔案的名稱 預設路徑為"我的文件夾 我的圖片"

    private int i = 0;
    public string NewFileName()
    {
    i++;
    string mypicsfolder = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
    string fileName = mypicsfolder + "\\Frame_" + i + ".png";


    if (File.Exists(fileName))
    {
    File.Delete(fileName);
    }
    return fileName;

    }

    //開啟儲存串流 把WPF主視窗影像 轉成PNG格式存檔

    public void SaveToFile(string fileName)
    {
    using (FileStream fs = new FileStream(fileName, FileMode.CreateNew))
            {
                        BitmapSource image = (BitmapSource)image1.Source;
                        PngBitmapEncoder encoder = new PngBitmapEncoder();
                        encoder.Frames.Add(BitmapFrame.Create(image));
                        encoder.Save(fs);
            }
    }

    //使用 DispatchTimer 控制項 進行每一秒做一次拍照存檔

    private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
    string filename = NewFileName();
    SaveToFile(filename);
    }

    解決!  再次感謝小歐大大!!

    2013年4月23日 上午 03:18