private void aviSaveAs() { try { OleDbConnection conn = bc.GetConn(); conn.Open(); OleDbCommand cmd = new OleDbCommand("select strPath from tb_VideoPath where ID=1", conn); string str = cmd.ExecuteScalar().ToString().Trim(); FileInfo fi = new FileInfo(str); if (fi.Exists) { fi.Delete(); } conn.Close(); aviWriter = new AVIWriter(); //avi中所有图像皆不能小于width及height avi_frame = aviWriter.Create(str, 1, SWidth, SHeight); for (int i = 0; i < al.Count; i++) { //获得图像 Bitmap cache = new Bitmap(Image.FromFile(al[i].ToString())); //由于转化为avi后呈现相反,所以翻转 cache.RotateFlip(RotateFlipType.Rotate180FlipX); //载入图像 aviWriter.LoadFrame(cache); aviWriter.AddFrame(); } aviWriter.Close(); avi_frame.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void Rendering() { //if (RecordingType == 0) //{ // int width = 750; // int height = 750; // DateTime time = System.DateTime.Now; // //create instance of video writer // VideoFileWriter writer = new VideoFileWriter(); // //create new video file // writer.Open("Recording/vedio/" + time.Year + "-" + time.Month + "-" + time.Day // + " " + time.Hour + "." + time.Minute + "." + time.Second // + ".avi", width, height, 96, VideoCodec.MPEG4); // //create a bitmap to save into the video file // int now = liTime[0]; // int liTimePosition = 0; // for (int i = 0; i < liTime[liTime.Count - 1]; i++) // { // if (i > now) // { // liTimePosition++; // now = liTime[liTimePosition]; // } // System.Drawing.Bitmap image = new System.Drawing.Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\Recording\\Temp\\" + (liTimePosition + 1) + ".png"); // writer.WriteVideoFrame(image); // } // //DirectoryInfo TheFolder = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\Recording\\Temp"); // //foreach (FileInfo NextFile in TheFolder.GetFiles()) // //{ // // int nIndex = NextFile.Name.LastIndexOf('.'); // // String filename = NextFile.Name; // // if (nIndex >= 0) // // { // // filename = filename.Substring(nIndex); // // if (filename.Equals(".png")) // // { // // System.Drawing.Bitmap image = new System.Drawing.Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\Recording\\Temp\\" + NextFile.Name); // // //NextFile.Name // // writer.WriteVideoFrame(image); // // } // // } // //} // writer.Close(); //} DateTime time = System.DateTime.Now; //org.loon.util.FileUtil file = new org.loon.util.FileUtil(); AVIWriter aviWriter = new AVIWriter(); //ps:avi中所有图像皆不能小于width及height System.Drawing.Bitmap avi_frame = aviWriter.Create(AppDomain.CurrentDomain.BaseDirectory + "/Recording/vedio/" + time.Year + "-" + time.Month + "-" + time.Day + " " + time.Hour + "." + time.Minute + "." + time.Second + ".avi", 96, 750, 750); int now = liTime[0]; int liTimePosition = 0; for (int i = 0; i < liTime[liTime.Count - 1]; i++) { if (i > now) { liTimePosition++; now = liTime[liTimePosition]; } //获得图像 System.Drawing.Bitmap image = new System.Drawing.Bitmap(AppDomain.CurrentDomain.BaseDirectory + "\\Recording\\Temp\\" + (liTimePosition + 1) + ".png"); //由于转化为avi后呈现相反,所以翻转 image.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipX); //载入图像 aviWriter.LoadFrame(image); aviWriter.AddFrame(); } //释放资源 aviWriter.Close(); avi_frame.Dispose(); }
void ConvertDicom2AVIFormat(object o) { float nPercent = 0; ConvertProcessEventArgs ev = new ConvertProcessEventArgs(0); #region 多帧文件存在 if (File.Exists(strMultiFrameDicomFileName)) { AVIWriter aviWriter = new AVIWriter(); DicomFile dcmFile = DicomFile.Open(strMultiFrameDicomFileName); dcmFile.Dataset.Get <string>(DicomTag.SOPInstanceUID, ""); int bmWidth = Convert.ToInt16(dcmFile.Dataset.Get <string>(DicomTag.Columns, "")); int bmHeight = Convert.ToInt16(dcmFile.Dataset.Get <string>(DicomTag.Rows, "")); string strDestFile = strOutPutAVIName; aviWriter.Create(strDestFile, (UInt16)nFrs, bmWidth, bmHeight); try { for (int i = nBeginFrame; i < nEndFrame; i++) { DicomFile tmpFile = dcmFile.Clone(); DicomImage dcmSingleImg = new DicomImage(tmpFile.Dataset); Image img = dcmSingleImg.RenderImage(i); Bitmap bmp = new Bitmap(img); bmp.RotateFlip(RotateFlipType.Rotate180FlipX); aviWriter.LoadFrame(bmp); aviWriter.AddFrame(); if (nEndFrame == 0) { nEndFrame = Convert.ToInt16(dcmFile.Dataset.Get <string>(DicomTag.NumberOfFrames, "")); } float f = (float)100 / (float)nEndFrame - nBeginFrame; nPercent += f; string s = nPercent.ToString(("#.##")); ev.LastPercent = ev.Percent; ev.Percent = Convert.ToSingle(s); callback(nPercent); Thread.Sleep(1); } } catch (Exception e) { MessageBox.Show(e.ToString()); } finally { aviWriter.Close(); } } #endregion #region 单帧文件列表存在 if (listSingleFrameFileName.Count > 0) { AVIWriter aviWriter = new AVIWriter(); DicomFile tmp_dcmFile = DicomFile.Open(listSingleFrameFileName[0]); int bmWidth = Convert.ToInt16(tmp_dcmFile.Dataset.Get <string>(DicomTag.Columns, "")); int bmHeight = Convert.ToInt16(tmp_dcmFile.Dataset.Get <string>(DicomTag.Rows, "")); string strDestFile = strOutPutAVIName; aviWriter.Create(strDestFile, (UInt16)nFrs, bmWidth, bmHeight); try { for (int i = 0; i < listSingleFrameFileName.Count; i++) { tmp_dcmFile = DicomFile.Open(listSingleFrameFileName[0]); DicomFile tmpFile = tmp_dcmFile.Clone(); DicomImage dcmSingleImg = new DicomImage(tmpFile.Dataset); Image img = dcmSingleImg.RenderImage(0); Bitmap bmp = new Bitmap(img); bmp.RotateFlip(RotateFlipType.Rotate180FlipX); aviWriter.LoadFrame(bmp); aviWriter.AddFrame(); float f = (float)100 / (float)listSingleFrameFileName.Count; nPercent += f; string s = nPercent.ToString(("#.##")); ev.LastPercent = ev.Percent; ev.Percent = Convert.ToSingle(s); callback(nPercent); Thread.Sleep(1); } } catch (Exception e) { MessageBox.Show(e.ToString()); } finally { aviWriter.Close(); } #endregion } ev.Percent = 100; }