史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 應用軟體使用技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-05-10, 10:07 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 秘笈:抓圖實戰12招大放送

秘笈:抓圖實戰12招大放送

一、最直接最快的抓圖方法用WIN95/98提供的記事本。操作:按PrintScreen鍵抓取整個螢幕;Alt+PrintScreen鍵抓取活動視窗。記事本的缺點:只有兩種抓取模式,抓取的圖片不能直接儲存為圖像文件。

  二、抓取滿屏的DOS程序圖片用SnagIt/32抓圖程式。操作:先選項[Input]表單→[FullSceenDos]選項,
[Output]表單→[File]選項,再選項[ImageCapture]按鈕;從WIN95/98的DOS狀態下執行一個程序(如Edit程序),最後按PrintSceen鍵。

  三、抓取滿屏的DOS程序文本

  方法一:用SnagIt/32圖程序。先選項[Input]表單→[Full Screen Dos]選項,[Output]表單→[File]選項,再選項[TextCapture]按鈕;從WIN95/98的DOS狀態下執行一個程序(如Edit程序),最後按PrintSceen鍵。

  方法二:用記事本。從WIN95/98的DOS狀態下執行一個程序(如Edit程序),再按PrintSceen鍵。兩種方法的區別:SnagIt/32抓取的文本可直接在其中編輯處理,而記事本不行。

  四、抓取WINDOWS程序中的文本用SnagIt/32抓圖程式。操作:選項[TextCapture]按鈕,再從[Input]表單中選項一種抓取方式。說明:該功能非常強大,幾乎可以抓取WIN95/98中任何可見的,包括不能被選取複製的文本。

  五、抓取手動式自由圈繪的螢幕區域用Clip'nSave抓圖程式。操作:選項[Capture]表單→[FreeHand]選項,按住滑鼠左鍵圈繪一個封閉的螢幕區域,再鬆開滑鼠便可。

  六、抓取橢圓形和多邊形。用Capture Professional(hynap只能抓矩形區域,一般我都是先抓了矩形區,然後到photoshop中裁剪)抓圖程式。

  操作:1.選項[Capture]表單→[Ellipse]選項,或直接按熱鍵Ctrl+Shift+E啟動橢圓抓圖模式。將滑鼠移動到適當的位置,按住滑鼠左鍵並移到出一個橢圓區域,再鬆開滑鼠即可抓取一個橢圓區域

  2.選項[Capture]表單→[Polygon]選項,或直接按熱鍵Ctrl+Shift+P啟動多邊形抓圖模式,這時的滑鼠游標變成了一個五角星加十字形的形狀。按下滑鼠左鍵一次可確定多邊形的第一個頂點,再分別將滑鼠移動到適當位置按下左健確定多邊形的第二、第三至最後一個頂點,在多邊形的最後一個頂點處雙按滑鼠左健,便可抓取一個多邊形區域

  七、抓取滑鼠游標和可見圖標用Capture Professional抓圖程式。

  操作:1.當出現你所需要的滑鼠游標形狀時,按Ctrl+Shift+T鍵即可抓取到所需的滑鼠形狀。

  2.選項[Capture]表單→[Icon]選項,或直接按熱鍵Ctrl+Shift+I啟動圖標抓取模式,這時滑鼠游標變成了一個筆記型加十字形的形狀。將滑鼠游標移動到所需的圖標上按下並按住滑鼠左鍵,把出現的正方形選取框套住該圖標再鬆開滑鼠左鍵即可。

  八、抓取隱藏圖標、BMP圖形或滑鼠游標用CapturProfessional抓圖程式。操作:選項[File]表單→[Extract]選項,在彈出的[ExtractImage]視窗中,搜尋或輸入一個檔案名(只能是 .exe, .dll檔案檔案類型),這時從下方顯示出隱藏在該檔案中的圖標、圖形或滑鼠游標圖像,選項所需的一個,最後按下[Extract]按鈕即可

  九、一次抓取多個視窗用Capture Professional抓圖程式。操作:選項[Capture]表單→[MultipleWindows]選項,或直接按熱鍵Ctrl+Shift+U啟動多視窗抓取模式。將滑鼠移動到要抓取的第一個視窗,按下滑鼠左鍵,再分別移動到第二、第三至最後一個視窗並按下滑鼠左鍵,然後在最後一個視窗上雙按滑鼠左鍵即可。

  十、一次抓取所有表單用Capture Professional抓圖程式。操作:選項[Capture]表單→[Menu Capture Wizard](表單抓取精靈)選項,再按照精靈提示做下去,便可一次抓取到所需程序的所有表單(包括子表單)。注意不能抓取先於該抓圖程式啟動的程序的表單。

  十一、抓取無邊框的活動視窗用HyperSnap-DX抓圖程式。操作:選項[Capture]表單→[Active Window Without Frame]選項,或直接按熱鍵Ctrl+Shift+C即可抓取所需無邊框的活動視窗。

  十二、抓取DirectX、3dfxGLIDE遊戲畫面和VCD/DVD播放畫面用HyperSnap-DX抓圖程式。操作:選項[Capture]表單→[Enable Special Capture(Directx,Glide,DVD...)]選項,啟動這些特殊的抓圖功能。當出現要抓取的畫面時,按ScrollLock鍵即可。如果抓取成功的話,電腦機箱裡的喇叭會發出一聲蜂鳴。?

  還有,這些工具中,hypersnap的功能十分強大,並且使用方便.其他的基本就不怎麼用.這些工具遠不止這些功能,只是懂得不多,手又懶,還是高手雅正吧
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2006-09-06, 09:57 PM   #2 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

七款常用視頻播放軟件的抓圖功能介紹
動態網站製作指南 | www.knowsky.com
  在欣賞影片時,遇到精彩畫面,當然要捕捉下來,與好友共同分享。不必用什麼專用抓圖[/b]軟件,我們常用的影音播放軟件大都擁有抓圖功能,能夠捕捉到精美的畫面圖像。
  ·超級解霸
  在超級解霸中截取精彩圖片顯得很容易,執行超級解霸V8.3,在其主界面中有「單張抓圖」和「連續抓圖」按鍵(快捷鍵分別是Ctrl+F1和Ctrl+F2),單擊該按鍵,出現「儲存圖片」視窗,選擇好儲存位置,即可把抓到的影片圖像儲存。
  ·Windows Media Player[/b][/b]
  在WMP10中隱藏著一個抓圖熱鍵,在播放電影的過程中,遇到精彩畫面,只需按下「Ctrl+I」組合鍵,彈出「儲存已捕獲圖像」視窗(圖1),即可把捕捉的當前畫面儲存成JPEG或BMP格式。此法對於ASF、WMV格式無效。
http://www.knowsky.com/img2005/246107.jpg
圖1
  ·Media Player[/b] Classic[/b][/b]  在MPC的「文件」表菜單中有一個「儲存圖像」命令,在影片播過程放中,只需執行該命令,即可打開「另存為」視窗,把捕獲的圖像儲存為JPEG或BMP格式。
  ·東方影都
  在東方影都2003的主界面中也有「抓圖」按鍵(圖2),快捷鍵為Alt+C ,單擊該按鍵,同樣會出現「另存為」視窗來儲存圖像。我們也可以事先設置好圖像的儲存位置,從而不出現「另存為」視窗:單擊表菜單「外觀→設置」,選擇「播放器設置」,勾選「抓圖設置」中的「抓圖自動存盤」,並在下方指定好捕獲圖像的存儲路徑(圖3)。
http://www.knowsky.com/img2005/246108.jpg
圖2
http://www.knowsky.com/img2005/246109.jpg
圖3

  ·金山影霸
  金山影霸2003中的畫面捕捉功能更加實用——不僅可以把捕捉的畫面儲存在文件中,還可以設置成桌面背景,甚至把圖片捕捉至剪貼板中。如果要把捕捉的畫面插入某一文檔中(如PowerPoint幻燈片),就要利用「儲存到剪貼板」這一功能了,只需在文檔中按下Ctrl+V鍵即可,省去了儲存圖像的麻煩。設置方法如下:單擊金山影霸視窗中的「內容配置」按鍵,選擇「抓圖設置」,有四種儲存方式供選擇(圖4),還可以自定義圖像大小。播放影片時,單擊主界面中的「抓圖」按鍵即可把捕捉到精彩畫面。
http://www.knowsky.com/img2005/246110.jpg
圖4
  ·PowerDVD
  單擊PowerDVD 5的主界面中的「配置」按鍵,在出現的視窗中打開「播放設置」,單擊「高階」按鍵,出現「高階選項」視窗,切換到「快照」標籤(圖5),在此即可設置捕捉模式以及畫面大小。影片播放過程中,只需單擊主界面中的「捕捉畫面」按鍵,或按下快捷鍵C,即可捕捉下當前畫面。
http://www.knowsky.com/img2005/246111.jpg
圖5
  ·RealOne Player[/b]
  在用RealOne Player[/b]播放視頻文件的過程中,如果用鍵盤上的「Print Screen」來抓屏的話,常常不能真正地抓取我們所需的畫面。只需按如下設置一下即可:單擊RealOne Player[/b]播放器表菜單欄的「工具→參數設置」,然後在彈出的視窗中點擊「硬體」,接著在右側視窗內中將「顯示卡相容」改為「最可靠」,點「確定」按鍵。要抓取RealOne Player[/b]播放器當中的視頻畫面,只需將視窗大小調整為99%,然後按下鍵盤上面的Print鍵,即可輕鬆抓屏。
轉自:動態網站製作指南 | www.knowsky.com
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2006-09-06, 10:00 PM   #3 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

螢幕抓圖捕捉技術專題站windows 螢幕捕捉, 抓圖, 抓圖, 擷取技術



01. 怎樣從螢幕抓圖?
使用 Print Screen 鍵抓圖很簡單,當然功能也很弱,只能抓下整個桌面。不過,這個可以通過圖像編輯軟件,進行後期編輯。

02. 七款常用視頻播放軟件的抓圖功能介紹
視頻播放器的抓圖,比普通螢幕的抓圖要麻煩一些.這是因為大多數的視頻播放,都使用了 DirectX 的 Overlay 技術,視頻資料直接上屏,用普通的方法抓取不到.

03. 使用 SuperCapture 超級屏捕抓取超出螢幕範圍需要滾屏的畫面和網頁
如何捕捉超出螢幕範圍的超長畫面? 在實際應用中,我們經常要將超出螢幕範圍的滾屏畫面,存為一張大圖。在沒有專門抓圖工作的情況下,我們只能一張一張先抓好,然後再用畫圖工具或 Adobe Photoshop 等一張一張拼起來成為一張大圖。這樣非常不便。

04. 獲取免費的 SuperCapture 超級屏捕專業版註冊碼
我上午寫了一篇關於使用 SuperCapture 捕捉超出螢幕範圍的超長畫面的介紹,放到了 blog 上,聯繫了一下 SuperCapture 小組,今天中午,就收到了他們發過來的免費註冊碼。哈哈,不錯。

Blog

July 31
獲取免費的 SuperCapture 超級屏捕專業版註冊碼
  昨天晚上正在寫有關螢幕捕捉、抓圖的文章,在 SuperCapture 超級屏捕的網站上查資料時,看到一條下列的告示:

  您是一位網路站長, 博客(blogger) 或網路專欄作家嗎? 如果您在自己的網站、blog(博客) 或專欄上撰寫有關 SuperCapture 產品的評論、介紹或使用心得,我們將免費贈送價值 50 元的 SuperCapture 專業版的註冊碼給你! 不要猶豫, 立即撰寫評論和介紹, 現在就獲取免費註冊碼!

  有哪些要求?

  我們要求您滿足下條件:

您必須擁有自己的網站、blog(博客)、 或網路專欄, 這樣您才能將您寫的評論放在你的空間上。
評論、介紹或使用心得的文字不少於 400 字。
您必須在您的首頁放置此評論或介紹的鏈接至少兩個月。
評論內容中, 必須包含鏈接到 SuperCapture 的網站的首網頁面或子網頁面。
  ……
  活動介紹位址:http://www.supercapture.net/cn/writereview.htm



  於是我上午寫了一篇關於使用 SuperCapture 捕捉超出螢幕範圍的超長畫面的介紹,放到了 blog 上,聯繫了一下 SuperCapture 小組,今天中午,就收到了他們發過來的免費註冊碼。哈哈,不錯。

  有興趣的朋友可以方式一試。

2:35 PMAdd a commentPermalinkTrackbacks (0)Blog it
Permalinkhttp://screen-capture-tech.spaces.live.com/blog/cns!66AFFFF2C3CE86FB!122.entry
You must sign in using a Windows Live ID™ to add a comment to this space.
Don't have a Windows Live ID? Sign up now.

Add a commentYour name:

Your e-mail address (optional):

Your blog web address (optional):

Comment (text only):

AddCancel
TrackbacksThe trackback URL for this entry is:
http://screen-capture-tech.spaces.li...E86FB!122.trak
Weblogs that reference this entry
None
使用 SuperCapture 超級屏捕抓取超出螢幕範圍需要滾屏的畫面和網頁
  如何捕捉超出螢幕範圍的超長畫面?

  在實際應用中,我們經常要將超出螢幕範圍的滾屏畫面,存為一張大圖。在沒有專門抓圖工作的情況下,我們只能一張一張先抓好,然後再用畫圖工具或 Adobe Photoshop 等一張一張拼起來成為一張大圖。這樣非常不便。

  使用 SuperCapture 超級屏捕專業版,這一切工作變得很簡單。對於捕捉超出螢幕範圍的畫面,SuperCapture 超級屏捕專業版分為兩種情況進行處理。

  一. 對於普通滾屏網頁畫面的處理

  超級屏捕可以輕鬆方便地將整張網頁存儲為一張圖像,甚至是超出螢幕範圍的網頁。這一切僅僅只需要兩個簡單的步驟:

  第1步:在 Internet Explore 瀏覽器內點擊滑鼠右鍵,然後從右鍵表菜單中選擇 [超級屏捕 -> 將網頁儲存為圖像...] 命令。
  第2步:在交談視窗中選擇一個捕捉類型,然後點擊[捕捉]按鍵。超級屏捕 將捕捉整張網頁至一張圖片。

  您也可以使用熱鍵來捕捉網頁。預定捕捉熱鍵是 Ctrl+F7。如果您希望捕捉 CHM 格式的EBook 文檔至一張圖片,您必須使用熱鍵才能完成。   
在捕捉網頁時,有兩個選項可供選擇:
  
捕捉網頁內容到圖片. 不包括IE視窗。   
捕捉網頁內容和視窗到圖片. 包括網頁內容、IE視窗、標題欄、工具欄等。
  在Windows 9x/Me下,建立的位圖最大不能超過16M。如果您需要捕捉超大網頁,超級屏捕會將其存為多個圖片,每個圖片小於16M。


--------------------------------------------------------------------------------
注意:
1 如果網頁中包含了框架(Frame)元素,那麼超級屏捕也許不能很好的將整張網頁捕捉存為一張圖片。
2.這個功能必須在 Microsoft Internet Explorer 5.0(或更新版本) 下才能使用。
--------------------------------------------------------------------------------

  二 捕捉標準滾屏的 Windows 視窗

  打開超級屏捕,點擊表菜單「工具 -> 選項」,在「捕捉」網頁面中,將「視窗/控件捕捉模式下自動滾動視窗」選項打上勾。然後按「確定」按鍵。如果您是第一次打開此內容,會彈出一個使用此特性的說明視窗。閱讀瞭解之後按確定關閉即可。

  需要捕捉時,只需按以下步驟操作即可:


點擊你要捕捉的具有滾動內容的視窗, 使其垂直滾動條可見. 或者將滑鼠指向您要捕捉的滾動視窗.
按下 Ctrl+F1 (超級屏捕定義的視窗/控件捕捉預定熱鍵), 然後點擊滑鼠左鍵.
滾動條將不斷向下滾動直到完成捕捉. 在此期間, 您可以點擊滑鼠右鍵提前結束捕捉.
  超級屏捕專業版的下載位址:http://www.supercapture.net/cn/scree...o/download.htm

1:41 PMAdd a commentPermalinkTrackbacks (0)Blog it
Permalinkhttp://screen-capture-tech.spaces.live.com/blog/cns!66AFFFF2C3CE86FB!120.entry
You must sign in using a Windows Live ID™ to add a comment to this space.
Don't have a Windows Live ID? Sign up now.

Add a commentYour name:

Your e-mail address (optional):

Your blog web address (optional):

Comment (text only):

AddCancel
TrackbacksThe trackback URL for this entry is:
http://screen-capture-tech.spaces.li...E86FB!120.trak
Weblogs that reference this entry
None
July 30
9:34 PMAdd a commentPermalinkTrackbacks (0)Blog it
Permalinkhttp://screen-capture-tech.spaces.live.com/blog/cns!66AFFFF2C3CE86FB!118.entry
You must sign in using a Windows Live ID™ to add a comment to this space.
Don't have a Windows Live ID? Sign up now.

Add a commentYour name:

Your e-mail address (optional):

Your blog web address (optional):

Comment (text only):

AddCancel
TrackbacksThe trackback URL for this entry is:
http://screen-capture-tech.spaces.li...E86FB!118.trak
Weblogs that reference this entry
None
七款常用視頻播放軟件的抓圖功能介紹
視頻播放器的抓圖,比普通螢幕的抓圖要麻煩一些.這是因為大多數的視頻播放,都使用了 DirectX 的 Overlay 技術,視頻資料直接上屏,用普通的方法抓取不到.支持 DirectX 捕捉技術的軟件也不多,目前只有 Hypersnap, SuperCapture 超級屏捕專業版, SnagIT 等少數幾款專業級的圖像軟件支持 DirectX 抓取。那麼,在沒有專門的螢幕抓圖程式支持的情況下,我們該怎麼操作呢?下面列出了常用的七款視頻播放器的抓圖功能介紹。


超級解霸

  在超級解霸中截取精彩圖片顯得很容易,執行超級解霸V8.3,在其主界面中有「單張抓圖」和「連續抓圖」按鍵(快捷鍵分別是Ctrl+F1和Ctrl+F2),單擊該按鍵,出現「儲存圖片」視窗,選擇好儲存位置,即可把抓到的影片圖像儲存。


Windows Media Player

  在 Windows Media Player 10 中,有一個隱藏著抓圖熱鍵。在播放視頻的過程中,遇到想要抓取的畫面,只需按下熱鍵 Ctrl +I ,彈出「儲存已捕獲圖像」視窗,即可把捕捉的當前畫面儲存成JPEG或BMP格式。不過,需要注意的是,此方法對於ASF、WMV格式無效。


Media Player Classic

  在 Media Player Classic 播放視頻時,點擊表菜單: 「文件 ->儲存圖像」命令,即可打開「另存為」視窗,把捕獲的圖像儲存為JPEG或BMP格式。


東方影都

  在東方影都 2003 的界面中, 有一個「抓圖」的按鍵,其快捷鍵為 Alt+C,執行此熱鍵後,會出現一個「另存為」的視窗,輸入圖像文件名來儲存圖像。
  東方影都可以預設好圖像的儲存位置,這樣抓圖時直接存盤,不會彈出「另存為」視窗。具體設置如下:
單擊表菜單「外觀→設置」
點擊「播放器設置」
選中「抓圖設置」中的「抓圖自動存盤」,並在下方指定好捕獲圖像的存儲路徑即可



金山影霸

  金山影霸2003中的畫面捕捉功能也不錯——不僅可以把捕捉的畫面儲存在文件中,還可以設置成桌面背景,甚至把圖片捕捉至剪貼板中。如果要把捕捉的畫面插入某一文檔中(如PowerPoint幻燈片),就要利用「儲存到剪貼板」這一功能了,只需在文檔中按下Ctrl+V鍵即可,省去了儲存圖像的麻煩。設置方法如下:單擊金山影霸視窗中的「內容配置」按鍵,選擇「抓圖設置」,有四種儲存方式供選擇,還可以自定義圖像大小。播放影片時,單擊主界面中的「抓圖」按鍵即可把捕捉到精彩畫面。


PowerDVD

  單擊PowerDVD 5的主界面中的「配置」按鍵,在出現的視窗中打開「播放設置」,單擊「高階」按鍵,出現「高階選項」視窗,切換到「快照」標籤(圖5),在此即可設置捕捉模式以及畫面大小。影片播放過程中,只需單擊主界面中的「捕捉畫面」按鍵,或按下快捷鍵C,即可捕捉下當前畫面。


RealOne Player

  在用RealOne Player 播放視頻文件的過程中,如果用鍵盤上的「Print Screen」來抓屏的話,常常不能真正地抓取我們所需的畫面。只需按如下設置一下即可:單擊RealOne Player播放器表菜單欄的「工具→參數設置」,然後在彈出的視窗中點擊「硬體」,接著在右側視窗內中將「顯示卡相容」改為「最可靠」,點「確定」按鍵。要抓取RealOne Player播放器當中的視頻畫面,只需將視窗大小調整為99%,然後按下鍵盤上面的Print鍵,即可輕鬆抓屏。


6:56 PMAdd a commentPermalinkTrackbacks (0)Blog it
Permalinkhttp://screen-capture-tech.spaces.live.com/blog/cns!66AFFFF2C3CE86FB!110.entry
You must sign in using a Windows Live ID™ to add a comment to this space.
Don't have a Windows Live ID? Sign up now.

Add a commentYour name:

Your e-mail address (optional):

Your blog web address (optional):

Comment (text only):

AddCancel
TrackbacksThe trackback URL for this entry is:
http://screen-capture-tech.spaces.li...E86FB!110.trak
Weblogs that reference this entry
None
怎樣從螢幕抓圖?
我們在編寫軟件說明、介紹、製作網站時,通常需要把螢幕上的一部分抓下來,存為圖片。

常用抓圖工具可以分兩種,一種是用鍵盤上的 PrintScreen 鍵(有的鍵盤上是PrtscSys Rq)來實現,另一種就是採用專用的抓圖工具進行抓圖,例如 SnagIT, Super Capture 超級屏捕等。

使用 Print Screen 鍵結合畫圖工具抓圖

使用 Print Screen 鍵抓圖很簡單,當然功能也很弱,只能抓下整個桌面。不過,這個可以通過圖像編輯軟件,進行後期編輯。

下面,我介紹一下使用 PrintScreen 鍵抓圖的方法:

抓取圖像: 在出現想要抓圖的畫面時,直接按下鍵盤上的 PrintScreen 鍵。有些鍵盤上的名字可能簡寫成了 Prnt Scrn鍵;另外,在有些筆記本電腦的鍵盤上,為了節省鍵盤空間,PrintScreen鍵與其他鍵組合在一起了,你可能需要按下 Fn鍵 + PrintScreen 鍵 才行。


在圖像編輯軟件中貼上去圖像: 以 Microsoft 的畫圖為例:
首先,點擊 Windows 表菜單:開始 -> 程式 -> 附件 -> 畫圖(有些 windows 版本可能叫小畫家,或 MSPaint),打開畫圖工具。
打開畫圖工具之後,點擊表菜單:編輯 -> 粘帖,或者直接按下 Ctrl+V熱鍵,這時,截下來的圖,就貼上去到了畫面程式中了。


儲存圖像: 同樣以剛才的 Windows 畫圖為例,點表菜單: 文件 -> 儲存,在儲存交談視窗中,選擇文件名和格式就行了。如果不計較空間大小,直接使用 BMP 格式就行了;如果圖像內容是一些螢幕操作的畫面,建議使用 PNG 格式;如果圖像的內容是照片等畫面,建議使用 JPEG/JPG 格式。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2006-09-06, 10:42 PM   #4 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

DShow中實現抓圖的幾種方法
1.加入Sample Grabber Filter
當我們加入Sample Grabber Filter的時候,我們可以直接呼叫其接頭(interface)ISampleGrabber。該接頭可以獲取經過該Filter的單獨的Media Samples。詳情請參見DXSDK。

1.1 派生出自己的Sample Grabber
從ISampleGrabberCB中派生出自己的類,然後實現其虛函數,詳情請參見SDK中的示例程式(DXSDK ROOT\Samples\C++\DirectShow\Editing\GrabBitmaps)。

1.2 直接呼叫Sample Grabber Filter的接頭
如果我們在播放的過程中動態的加入Filter的話,操作和效率都不樂觀。所以我採用下面的方法:

該方法傳遞的是時間,不是在播放的時候動態加入Filter然後抓圖,而是另外打開源文件進行操作。

A)。申明以下接頭:

#001 IGraphBuilder *pGraph = NULL; //for graph builder



#002 IMediaControl *pControl = NULL; //media control



#003 IMediaSeeking *pSeeking = NULL; //media seeking



#004 IMediaEventEx *pEvent = NULL; //media envent



#005 IBaseFilter *pNullFilter =NULL;//for holding the Sample grabber Filter



B)。初始化接頭:

#001 JIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,

#002 IID_IGraphBuilder, (void **)&pGraph));

#003

#004 JIF(CoCreateInstance(CLSID_NullRenderer, NULL, CLSCTX_INPROC,

#005 IID_IBaseFilter, (void **)&pNullFilter));

#006 JIF(pGraph->QueryInterface(IID_IMediaControl,(void **)&pControl));

#007 JIF(pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pSeeking));

#008 JIF(pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent));

C)。創建Sample Grabber

#001 // Create the Sample Grabber.



#002 IBaseFilter *pGrabberF = NULL;

#003 JIF(CoCreateInstance(CLSID_SampleGrabber,NULL, CLSCTX_INPROC_SERVER,

#004 IID_IBaseFilter, (void**)&pGrabberF));

#005

#006 JIF(pGraph->AddFilter(pGrabberF, L"Sample Grabber"));

#007 JIF(pGraph->AddFilter(pNullFilter, L"Null Render Filter"));

#008

#009 ISampleGrabber *pGrabber;

#010 JIF(pGrabberF->QueryInterface(IID_ISampleGrabber, (void**)&pGrabber));

設置Sample Grabber的媒體格式:呼叫SetMediaType,該函數接受一個AM_MEDIA_TYPE的結構,主要是設置該結構中的majortype,和subtype域。

D)。新增Source Filter:

#001 IBaseFilter *pSrc;

#002 JIF(pGraph->AddSourceFilter(T2W(m_szFile), L"Source", &pSrc));

E)。連接Grabber 和 NullRender兩個Filter:

#001 IPin *pOutPin;

#002 hr = GetPin(pGrabberF, PINDIR_OUTPUT, &pOutPin);

#003

#004 IPin *pInPin;

#005 hr = GetPin(pNullFilter, PINDIR_INPUT, &pInPin);

#006

#007 pGraph->Connect(pOutPin, pInPin);

F)。取得當前所連接媒體的類型

#001 AM_MEDIA_TYPE mt;

#002 hr = pGrabber->GetConnectedMediaType(&mt);

#003 // Examine the format block.



#004 VIDEOINFOHEADER *pVih;

#005 if ((mt.formattype == FORMAT_VideoInfo) &&

#006 (mt.cbFormat >= sizeof(VIDEOINFOHEADER)) &&

#007 (mt.pbFormat != NULL) )

#008 {

#009 pVih = (VIDEOINFOHEADER*)mt.pbFormat;

#010 }

#011 else



#012 {

#013 // Wrong format. Free the format block and return an error.



#014 FreeMediaType(mt);

#015 return VFW_E_INVALIDMEDIATYPE;

#016 }

#017

#018 // Do buffer the samples as they pass through



#019 //



#020 hr = pGrabber->SetBufferSamples(TRUE);

#021

#022 // Only grab one at a time, stop stream after



#023 // grabbing one sample



#024 //



#025 hr = pGrabber->SetOneShot( TRUE );

G)。Seeking文件,使其到達要抓圖的時間幀

#001 pSeeking->SetPositions(pCurrentPos,

#002 AM_SEEKING_AbsolutePositioning,

#003 NULL, AM_SEEKING_NoPositioning );

#004

#005 pControl->Run();

#006

#007 long EvCode = 0;

#008

#009 hr = pEvent->WaitForCompletion( INFINITE, &EvCode );

H)。取得當前的buffer資料

#001 // Find the required buffer size.



#002 long cbBuffer = 0;

#003 hr = pGrabber->GetCurrentBuffer(&cbBuffer, NULL);

#004 LONGLONG currentPos;

#005 pSeeking->GetCurrentPosition(&currentPos);

#006 BYTE *pBuffer = new BYTE[cbBuffer];

#007 if (!pBuffer)

#008 {

#009 // Out of memory. Return an error code.



#010 Msg("Out of Memory");

#011 }

#012 hr = pGrabber->GetCurrentBuffer(&cbBuffer, (long*)pBuffer);

I)。寫入文件

#001 // Create a file to hold the bitmap



#002 HANDLE hf = CreateFile(szFilename, GENERIC_WRITE, FILE_SHARE_READ,

#003 NULL, CREATE_ALWAYS, NULL, NULL );

#004

#005 if( hf == INVALID_HANDLE_VALUE )

#006 {

#007 // Failed to create file



#008 return 0;

#009 }

#010

#011 // Write out the file header



#012 //



#013 BITMAPFILEHEADER bfh;

#014 memset( &bfh, 0, sizeof( bfh ) );

#015 bfh.bfType = ′MB′;

#016 bfh.bfSize = sizeof( bfh ) + cbBuffer + sizeof( BITMAPINFOHEADER );

#017 bfh.bfOffBits = sizeof(BITMAPINFOHEADER)+sizeof( BITMAPFILEHEADER );

#018

#019 DWORD Written = 0;

#020 WriteFile( hf, &bfh, sizeof( bfh ), &Written, NULL );

#021

#022 // Write the bitmap format



#023 //



#024 BITMAPINFOHEADER bih;

#025 memset( &bih, 0, sizeof( bih ) );

#026 bih.biSize = sizeof( bih );

#027 bih.biWidth = pVih->bmiHeader.biWidth;

#028 bih.biHeight = pVih->bmiHeader.biHeight;

#029 bih.biPlanes = pVih->bmiHeader.biPlanes;

#030 bih.biBitCount = pVih->bmiHeader.biBitCount;

#031

#032 Written = 0;

#033

#034 WriteFile( hf, &bih, sizeof( bih ), &Written, NULL );

#035

#036 // Write the bitmap bits



#037 //



#038 Written = 0;

#039 WriteFile( hf, pBuffer, cbBuffer, &Written, NULL );

#040 FreeMediaType(mt);

#041 CloseHandle(hf);

J)。釋放資源

#001 pControl->Stop();

#002 SAFE_RELEASE(pControl);

#003 SAFE_RELEASE(pSeeking);

#004 SAFE_RELEASE(pEvent);

#005 SAFE_RELEASE(pSrc);

#006 SAFE_RELEASE(pNullFilter);

#007 SAFE_RELEASE(pGrabber);

#008 SAFE_RELEASE(pGrabberF);

#009 SAFE_RELEASE(pGraph);

K)。其實我們可以不用NullRender,而是用IVideoWindow接頭來實現。如果是那樣的話,首先申明IVideoWindow *pVideo = NULL;將pVideo加入到Filter Graph中

#001 JIF(pGraph->QueryInterface(IID_IVideoWindow,(void**)&pVideo));

#002 hr = pGraph->Render(pOutPin);

#003 if (pVideo)

#004 {

#005 hr = pVideo->put_AutoShow(OAFALSE);

#006 }

通過IBasicVideo::GetCurrentImage接頭
對於該接頭,Video Renderer和Video Mixing Renderer(VMR)有不同的實現。

A)。Video Renderer

如果該Renderer使用了DDraw加速的話,該呼叫會失敗。在呼叫該接頭的時候,必須首先暫停Renderer(可以通過IMediaControl::Pause()暫停,如果不能確信該操作是否成功,應該呼叫IMediaControl::GetState()判斷狀態)。

B)。Video Mixing Renderer

對於VMR,該方法都會成功(不管是否運用了DDraw加速,也不管是否是暫停狀態),此時對於它所有的狀態(running, stopped, or paused)都適用。

函數Grabber代碼如下(呼叫該函數的時候應該先將媒體文件暫停,原因上面已經說了):

#001 bool Grabber(IBasicVideo mBasicVideo, TCHAR *szFilename)

#002 {

#003 if (mBasicVideo)

#004 {

#005 long bitmapSize = 0;

#006 if(SUCCEEDED(mBasicVideo->GetCurrentImage(&bitmapSize, 0)))

#007 {

#008 //if語句裡面的操作時取得buffer的size。



#009 //當我們在布確定image buffer的大小的情況下,我們給



#010 //GetCurrentImage的第二個參數傳遞0或者NULL,取得buffer的



#011 //大小供以後使用。



#012 bool pass = false;

#013 unsigned char * buffer = new unsigned char[bitmapSize];

#014 if(SUCCEEDED(mBasicVideo->GetCurrentImage(&bitmapSize,(long*)buffer)))

#015 {

#016 //此時已經用到剛才所取得的大小(分配空間)



#017 BITMAPFILEHEADER hdr; //Bitmap的頭訊息



#018 LPBITMAPINFOHEADER lpbi; // Bitmap的文件訊息(包括資料)



#019

#020 lpbi = (LPBITMAPINFOHEADER)buffer;

#021

#022 int nColors = 1 << lpbi->biBitCount;

#023 if (nColors > 256)

#024 nColors = 0;

#025

#026 hdr.bfType = ((WORD) (′M′ << 8) | ′B′); //always is "BM"



#027 hdr.bfSize = bitmapSize + sizeof( hdr );

#028 hdr.bfReserved1 = 0;

#029 hdr.bfReserved2 = 0;

#030 hdr.bfOffBits = (DWORD) (sizeof(BITMAPFILEHEADER) + lpbi->biSize

#031 CFile bitmapFile(outFile, CFile::modeReadWrite | CFile::modeCreate | CFile::typeBinary);

#032 bitmapFile.Write(&hdr, sizeof(BITMAPFILEHEADER));

#033 bitmapFile.Write(buffer, bitmapSize);

#034 bitmapFile.Close();

#035 pass = true;

#036 }

#037 delete [] buffer; //資料用過之後記得要釋放空間



#038 return true;

#039 }

#040 }

#041

#042 return false;

#043 }

IMediaDet接頭
IMediaDet接頭可以取得媒體文件的訊息。SDK裡面的示例代碼(沒有寫入文件):

#001 long size;

#002 //取得圖像幀的大小,給GetBitmapBits的第三個參數傳遞0 or NULL



#003 hr = pDet->GetBitmapBits(0, &size, 0, width, height);

#004 if(SUCCEEDED(hr))

#005 {

#006 char *pBuffer = new char[size];

#007 if(!pBuffer)

#008 {

#009 return E_OUTOFMEMORY;

#010 }

#011

#012 try



#013 {

#014 hr = pDet->GetbitmapsBits(0, 0, pBuffer, width, height);

#015 }

#016 catch(...)

#017 {

#018 delete [] pBuffer;

#019 throw;

#020 }

#021

#022 if(SUCCEEDED(hr))

#023 {

#024 BITMAPINFOHEADER *bmih = (BITMAPINFOHEADER*)pBuffer;

#025 HDC hdcDest = GetDC(0);

#026

#027 //Find the address of the start of the image data



#028 void *pData = pBuffer + sizeof(BITMAPINFOHEADER);

#029

#030 //Note: In general a BITMAPINFOHEADER can include extra color



#031 //information at the end, so calculating the offset to the image



#032 //data i snot generally correct. However, the IMediaDet interface



#033 //always returns an RGB-24 image with no extra color information



#034

#035 BITMAPINFO bmi;

#036 ZeroMemory(&bmi, sizeof(BITMAPINFO));

#037 CopyMemory(&(bmi.bmiHeader), bmih, sizeof(BITMAPINFOHEADER));

#038 HBITMAP hBitmap = CreateDIBitmap(hdcDect, bmih, CBM_INIT,

#039 pData, &bmi, DIB_RGB_COLORS);

#040 }

#041

#042 delete [] pBuffer;

#043 }

該方法並沒有寫入bitmap,具體的寫入過程可以參加上面的幾種方法。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2006-09-06, 10:46 PM   #5 (permalink)
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

Video frame capture using IBasicVideo
This page shows you how to capture a video frame using IBasicVideo. Please note that error handling codes are omitted to keep the sample code simple.

IBasicVideo::GetCurrentImage
There are 2 ways to grab a video frame. One is using IBasicVideo, and the other is using SampleGrabber. This page shows you howto use IBasicVideo.

Sample code
Please note that the following sample includes some code that is not directly related to IBasicVideo. The sample code saves an bitmap file after pressing the OK button. This is done to make the sample easily understandable. Therefore, you can omit the bmp saving part if you do not need them.



#include <stdio.h>
#include <dshow.h>

// change here
#define FILENAME L"C:\\DXSDK\\Samples\\Media\\butterfly.mpg"

// note that this sample fails on some environment
int
main()
{
IGraphBuilder *pGraphBuilder;
IMediaControl *pMediaControl;
IBasicVideo *pBasicVideo;

CoInitialize(NULL);

CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IGraphBuilder,
(LPVOID *)&pGraphBuilder);

pGraphBuilder->QueryInterface(IID_IMediaControl,
(LPVOID *)&pMediaControl);

pMediaControl->RenderFile(FILENAME);

pGraphBuilder->QueryInterface(IID_IBasicVideo,
(LPVOID *)&pBasicVideo);

pMediaControl->Run();

// The image will be saved when OK is clicked
MessageBox(NULL,
"Grab Image",
"Grab",
MB_OK);

// Must Pause before using GetCurrentImage
pMediaControl->Pause();

// get width and height
long height, width;

pBasicVideo->get_VideoHeight(&height);
pBasicVideo->get_VideoWidth(&width);

long bufSize;
long *imgData;
HRESULT hr;

/*
The second value is NULL to resolve required buffer size.
The required buffer size will be returned in variable "bufSize".
*/
hr = pBasicVideo->GetCurrentImage(&bufSize, NULL);
if (FAILED(hr)) {
printf("GetCurrentImage failed\n");
return 1;
}

if (bufSize < 1) {
printf("failed to get data size\n");
return 1;
}
imgData = (long *)malloc(bufSize);

// The data will be in DIB format
pBasicVideo->GetCurrentImage(&bufSize, imgData);

// save DIB file as Bitmap.
// This sample saves image as bitmap to help
// understanding the sample.
HANDLE fh;
BITMAPFILEHEADER bmphdr;
BITMAPINFOHEADER bmpinfo;
DWORD nWritten;

memset(&bmphdr, 0, sizeof(bmphdr));
memset(&bmpinfo, 0, sizeof(bmpinfo));

bmphdr.bfType = ('M' << 8) | 'B';
bmphdr.bfSize = sizeof(bmphdr) + sizeof(bmpinfo) + bufSize;
bmphdr.bfOffBits = sizeof(bmphdr) + sizeof(bmpinfo);

bmpinfo.biSize = sizeof(bmpinfo);
bmpinfo.biWidth = width;
bmpinfo.biHeight = height;
bmpinfo.biPlanes = 1;
bmpinfo.biBitCount = 32;

fh = CreateFile("result.bmp",
GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(fh, &bmphdr, sizeof(bmphdr), &nWritten, NULL);
WriteFile(fh, &bmpinfo, sizeof(bmpinfo), &nWritten, NULL);
WriteFile(fh, imgData, bufSize, &nWritten, NULL);
CloseHandle(fh);

free(imgData);

// Release resource
pBasicVideo->Release();

pMediaControl->Release();
pGraphBuilder->Release();

CoUninitialize();

return 0;
}


This sample creates a bitmap file named "result.bmp". The grabbed video frame is saved as a bitmap image. Please check the output bitmap file after you tried this sample.

IBasicVideo::GetCurrentImage Limitations
Please note that IBasicVideo::GetCurrentImage has some limitations. First of all, GetCurrentImage can only be used when the Graph is in Pause state. Next, it will not work on some hardware/software platform. (It will likely work if your software platform is Win
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 10:15 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1