• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Quay phim màn hình với C#

Các bài viết hướng dẫn về Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
hdn
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 319
Ngày tham gia: T.Tư 26/03/2008 7:09 pm
Has thanked: 1 time
Been thanked: 4 time

Quay phim màn hình với C#

Gửi bàigửi bởi hdn » T.Năm 12/06/2008 8:33 pm

Tên bài viết: Quay phim màn hình với C#
Tác giả: hdn
Cấp độ bài viết: Trung bình
Tóm tắt: Sử dụng WMEncoder để quay phim màn hình và lưu lại thành file wmv, bản gốc ở CodeProject là code VB.NET nên phải chuyển lại thành C#, ai muốn bản VB.NET có thể xem tại đây: http://www.codeproject.com/KB/audio-vid ... Video.aspx


Đầu tiên, ta cần phải có bộ Windows Media Encoder 9 Series, tải tại đây (9.5MB)
http://download.microsoft.com/download/ ... ncoder.exe
cái này cần để có thể compile được chương trình và sau này đem phần mềm qua máy khác cũng phải cài cái này :-S hơi rắc rối, nhưng được cái file quay xong nhẹ hều.
Cài xong rồi, mở C# lên, tạo một windows application mới, add reference thư viện WMEncoderLib vào, sau đó vào code view, gõ code như sau:
đầu tiên là using cái namespace WMEncoder

Mã: Chọn hết

  1. using WMEncoderLib;

tiếp đến khởi tạo một số đối tượng:

Mã: Chọn hết

  1.        WMEncoder Encoder = new WMEncoder();
  2.         IWMEncSourceGroup2 SrcGrp;
  3.         IWMEncSourceGroupCollection SrcGrpColl;
  4.         IWMEncVideoSource2 SrcVid;
  5.         IWMEncAudioSource SrcAud;
  6.         IWMEncProfileCollection ProColl;
  7.         IWMEncProfile Pro;
  8.         int i;
  9.         long lLength;
  10.         IWMEncDisplayInfo Descr;
  11.         IWMEncAttributes Attr;
  12.         IWMEncFile File;

bây giờ ta sẽ viết hàm để khởi tạo "máy quay" và quay phim, đoạn khai báo các đối tượng trên kia lát nữa xem code bạn sẽ hiểu chúng để làm gì.
Ta cần 3 hàm: initQP(), ZoQuayPhim() và ThoiQuay()
đầu tiên là hàm initQP()

Mã: Chọn hết

  1.  
  2.         public void initQP()
  3.         {
  4.             // Khởi tạo thông tin thiết bị ghi file AVI
  5.             SrcGrpColl = Encoder.SourceGroupCollection;
  6.             SrcGrp = (IWMEncSourceGroup2)SrcGrpColl.Add("SG_1");
  7.             SrcVid = (IWMEncVideoSource2)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
  8.             SrcAud = (IWMEncAudioSource)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
  9.             SrcVid.SetInput("ScreenCap://ScreenCapture1","","");
  10.             SrcAud.SetInput("Device://Default_Audio_Device","","");
  11.            
  12.             // Thiết lập Profile cho thiết bị ghi file AVI
  13.             ProColl = Encoder.ProfileCollection;
  14.             lLength = ProColl.Count;
  15.  
  16.             for (i = 0; i <= lLength - 1; i++)
  17.             {
  18.                 Pro = ProColl.Item(i);
  19.                 // Cái profile dùng dưới đây cho tốc độ rất tốt, chất lượng hình ảnh cũng rất cao
  20.                 // Bạn có thể thay profile này bằng profile khác, tên và thông tin các profile có
  21.                 // thể tham khảo tại:
  22.                 // http://msdn.microsoft.com/en-us/library/aa390939(VS.85).aspx
  23.                 // Nhưng mà mấy cái profile khác thì không tốt bằng cái này đâu
  24.                 if (Pro.Name == "Screen Video/Audio High (CBR)")
  25.                 {
  26.                     SrcGrp.set_Profile((IWMEncProfile)Pro);
  27.                     break;
  28.                 }
  29.             }
  30.  
  31.             // Những thông tin về file WMV sẽ được ghi ra
  32.             Descr = Encoder.DisplayInfo;
  33.             Descr.Author = "Tran Duc Huy"; // Tác giả
  34.             Descr.Copyright = "Copyright © Tran Duc Huy - VBClub"; // Copyright
  35.             Descr.Description = "Demo"; // Mô tả file
  36.             Descr.Rating = "Non-Rated"; // Đánh giá
  37.             Descr.Title = "Demo"; // Tiêu đề file
  38.             Attr = Encoder.Attributes;
  39.             Attr.Add("URL", "www.caulacbovb.com");
  40.             File = Encoder.File;
  41.             File.LocalFileName = "C:\\OutputFile.wmv";
  42.         }
  43.  

cần chú ý đoạn này
if (Pro.Name == "Screen Video/Audio High (CBR)")
{
SrcGrp.set_Profile((IWMEncProfile)Pro);
break;
}
"Screen Video/Audio High (CBR)" là tên profile (có thể hiểu là bảng thông tin chứa các thông số như độ phân giải, số khung hình,... thiết lập cho "máy quay"), vì không thể set tên profile theo cách thủ công được nên ta sẽ làm việc đó bằng cách duyệt từ đầu tới cuối danh sách profile, thấy cái nào có tên như thế thì đặt vào SrcGrp.
ngoài "Screen Video/Audio High (CBR)" ra thì còn nhiều profile khác, nhưng các profile đó đều cho chất lượng phim rất kém.
tiếp đến là hàm ZoQuayPhim()

Mã: Chọn hết

  1.        void ZoQuayPhim()
  2.         {
  3.             Encoder.Start();
  4.         }

bây giờ thì dừng quay

Mã: Chọn hết

  1.        void ThoiQuay()
  2.         {
  3.             if (Encoder.RunState.Equals(true))
  4.             {
  5.                 Encoder.Stop();
  6.                 MessageBox.Show("Đã quay xong!");
  7.             }
  8.         }

Muốn bắt đầu quay bạn chỉ cần gọi Encoder.Start() và dừng thì Encoder.Stop() là nó tự ghi file phim đã quay được vào đĩa (đường dẫn đã được thiết lập ở trên kia)
khi Encoder chưa start mà bạn stop nó thì sẽ lỗi, đoạn kiểm tra RunState là để kiểm tra trường hợp đó.
----
Bây giờ, để sử dụng, đầu tiên bạn phải gọi thủ tục initQP(), rồi lúc nào muốn quay thì gọi hàm ZoQuayPhim(), dừng quay thì ThoiQuay() :D


Bạn có thể xem đoạn phim được quay thử tại đây
OutputFile.rar
Phim demo
(380.7 KiB) Đã tải 1786 lần

và tải source đầy đủ tại đây
QuayPhim.rar
Mã nguồn (C#)
(150.75 KiB) Đã tải 2560 lần


:|

LE LUC KIM AN
Bài viết: 2
Ngày tham gia: T.Sáu 27/06/2008 9:27 am
Liên hệ:

Re: Quay phim màn hình với C#

Gửi bàigửi bởi LE LUC KIM AN » T.Sáu 10/10/2008 6:50 pm

Cám ơn bác Nhiều lắm !
Kiman

kakaquynhnga
Bài viết: 1
Ngày tham gia: T.Ba 11/11/2008 9:25 pm

Re: Quay phim màn hình với C#

Gửi bàigửi bởi kakaquynhnga » T.Năm 27/11/2008 7:21 am

thak! pác nhìu....mong pác sẽ có nhìu bài hay hơn nữa... =D>

mataattane2002
Bài viết: 6
Ngày tham gia: T.Bảy 29/03/2008 8:47 am

Re: Quay phim màn hình với C#

Gửi bàigửi bởi mataattane2002 » T.Hai 22/12/2008 12:54 am

cảm ơn pác nhiều hơn cái này mình down xuống chạy ngon lành hì hì

tuonglx
Bài viết: 4
Ngày tham gia: T.Năm 23/04/2009 5:19 pm

Re: Quay phim màn hình với C#

Gửi bàigửi bởi tuonglx » T.Năm 23/04/2009 5:22 pm

bác cho hỏi muốn capture một chương trình duy nhất (kô phải toàn bộ màn hình) thì làm thế nào?
thanks

tuonglx
Bài viết: 4
Ngày tham gia: T.Năm 23/04/2009 5:19 pm

Re: Quay phim màn hình với C#

Gửi bàigửi bởi tuonglx » T.Sáu 24/04/2009 5:43 pm

không thấy pro nào trả lời, hic

tuonglx
Bài viết: 4
Ngày tham gia: T.Năm 23/04/2009 5:19 pm

Re: Quay phim màn hình với C#

Gửi bàigửi bởi tuonglx » T.Hai 27/04/2009 5:15 pm

hay có cách nào để xác định tọa độ của chương trình mình muốn quay không hả các bác? rồi mình chọn quay ở vùng đó? ý tưởng như vậy có được không các bác?

vanmanh1988
Bài viết: 1
Ngày tham gia: T.Sáu 23/07/2010 12:03 am

Re: Quay phim màn hình với C#

Gửi bàigửi bởi vanmanh1988 » T.Sáu 23/07/2010 10:13 am

thư viện WMEncoderLib này có trong vb không vậy các bác.
em định lam một cái như sau:
em lap trình bằng vb để thu tín hiệu từ camera wiless hoạc wc.viêc thu bằng wc em làm được rồi,nhưng không biết cách lưu chương trình lại làm sao cả.
ví dụ như em muốn xem chương trình ngày hôm trước thì phải làm sao (chỉ có cách lưu lai thôi)
mong các bác chỉ cho em với.
em mói học vb thôi nên còn lúa lắm

qhhqnavy
Thành viên tích cực
Thành viên tích cực
Bài viết: 102
Ngày tham gia: T.Bảy 26/02/2011 10:45 am
Đến từ: Hải Phòng City

Re: Quay phim màn hình với C#

Gửi bàigửi bởi qhhqnavy » T.Tư 13/04/2011 11:57 pm

Rất chân thành cám ơn hdn

infotech
Bài viết: 1
Ngày tham gia: T.Hai 18/07/2011 3:58 pm

Re: Quay phim màn hình với C#

Gửi bàigửi bởi infotech » T.Hai 18/07/2011 4:02 pm

Làm thế nào để chỉ quay một cái form của mình thôi ? Xin giúp với các Pro ơi!


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách