熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi屏幕抓圖技術的實現

2022-06-13   來源: Delphi編程 
摘 要本文以Delphi作為開發平台給出了網絡監控軟件中的兩種屏幕抓圖技術的設計方法和步驟介紹了教師在計算機機房內教學時如何監控學生計算機顯示器上的畫面以保證教學的質量和效果

  引言

  隨著網絡技術的飛速發展計算機網絡在各高等院校教學中的使用已非常普遍但是我們發現一個問題在教學的過程中由於老師是面對著學生而背對著學生計算機的顯示器不能隨時查看學生計算機顯示器上的內容所以有的學生在教學中偷玩游戲影響了教學的質量和效果因此設計一款網絡監控軟件監控學生計算機十分必要為了實現這一目的此系統應具有以下功能

  ()教師用機可以循環顯示學生計算機的顯示器上的畫面

  ()教師用機可以動態顯示某一學生計算機的顯示器上的畫面

  ()教師用機可以對學生用計算機發出警告信息和控制信息

  ()學生用計算機開機自動運行服務端監控程序

  ()為了防止學生用計算機的服務端監控程序被學生發現用Ctrl+Alt+Del關閉在Ctrl+Alt+Del對話框中必須隱藏程序同時應該隱藏程序在任務欄的按鈕

  本文結合應用實踐重點向大家介紹在Delphi中可以采用的兩種實現屏幕抓圖技術的操作方法

  程序實現

  ()抓取屏幕圖像的難點有兩個一是如何奪取屏幕的句柄二是知道屏幕句柄後如何獲取屏幕的圖像Borland公司的設計人員用畫布(Tcanvas)對象封裝了Windows的大部分圖形輸出功能可以通過它以更直觀的方式和Windows的屏幕打交道而不必關心令人頭疼的Windows API函數具體程序如下

procedure TFormTimerTimer(SenderTObject)//抓取屏幕並保存到Image控件中
var
 FullscreenTbitmap
 FullscreenCanvasTCanvas
 dcHDC
begin
 Fullscreen=TBitmapCreate
 //創建一個BITMAP來存放圖象
 FullscreenWidth=screenwidth
 FullscreenHeight=screenHeight
 DC=GetDC() //取得屏幕的DC參數指的是屏幕
 FullscreenCanvas=TCanvasCreate
 //創建一個CANVAS對象
 FullscreenCanvasHandle=DC
 FullscreenCanvasCopyRect(Rect(screenWidthscreenHeight)
 fullscreenCanvasRect(ScreenWidthScreenHeight))
 //把整個屏幕復制到BITMAP中
 FullscreenCanvasFree
 //釋放CANVAS對象
 ReleaseDC(DC) //釋放DC
 //*******************************
 imagepictureBitmap=fullscreen //拷貝下的圖象賦給IMAGE對象
 imageWidth=fullscreenWidth
 imageHeight=fullscreenHeight
 fullscreenfree //釋放bitmap
 formWindowState=wsNormal //復原窗口狀態
 formshow //顯示窗口
 messagebeep() //BEEP叫一聲報告圖象已經截取好了
end

  ()Delphi的第三方控件ScreenCapture它是一個很好的免費的截圖控件可以輕松抓取任意大小(全屏當然行)屏幕的任何位置還可以設置所截圖像的形狀以及用何種模式截圖下面介紹的是用TcmWindow模式截圖使用非常簡單使用效果可以與著名的抓圖軟件SnagIt媲美

procedure TFormBtnStartClick(SenderTObject)
begin
 ScreenCapturestart //開始截圖
end

 //當截取屏幕成功時此事件發生
 procedure TFormScreenCaptureCapture(SenderTObjectBitmapTBitmap)
begin
 //調整滾動窗口的大小以適應截獲圖像的大小
 ScrollboxHorzScrollBarRange= Imagewidth
 ScrollboxVertScrollBarRange= Imageheight
end

procedure TFormFormCreate(SenderTObject)
begin
 //載入entntacpdll文件
 BtnStartenabled= ScreenCapturedllavailable
 //顯示版本信息
 caption= 屏幕抓圖軟件 + ScreenCaptureversion
end

//當沒有足夠的內存支持截取屏幕時此事件發生
procedure TFormScreenCaptureError(SenderTObject)
begin
 MessageDlg(屏幕截取時發生一個錯誤!請關閉其他應用程序以獲得更多內存資源 mtError[mbOK])
end

 //當用戶按Esc即取消屏幕截取時此事件發生
procedure TFormScreenCaptureUserCancelled(SenderTObject)
begin
 MessageDlg(用戶取消屏幕截取mtInformation[mbOK])
end
  運行程序效果如圖和圖所示



 運行效果圖

 抓取圖像後的效果圖

  結論

  通過對以上兩種程序代碼的調試運行使用第三方控件的方法更易於設計實現文中的程序代碼全部在Win和Delphi環境下調試通過


From:http://tw.wingwit.com/Article/program/Delphi/201311/11121.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.