bigboy123 Posted December 28, 2009 at 04:24 AM Report Share #302705 Posted December 28, 2009 at 04:24 AM Boas pessoal, Aqui à tempos realizei um programa que tirava printscreens assim que era executado. Agora quero redimensionar as imagens que o programa tira, mas não sei como 😕 Aqui vai o código do principio ao fim: Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As String) As Integer Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As Integer) As Integer Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer Private Declare Function GetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" (ByVal hdc As Integer, ByVal nIndex As Integer) As Integer Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Integer, ByVal hObject As Integer) As Integer Private Declare Function BitBlt Lib "GDI32" (ByVal srchDC As Integer, ByVal srcX As Integer, ByVal srcY As Integer, ByVal srcW As Integer, ByVal srcH As Integer, ByVal desthDC As Integer, ByVal destX As Integer, ByVal destY As Integer, ByVal op As Integer) As Integer Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As Integer) As Integer Private Declare Function DeleteObject Lib "GDI32" (ByVal hObj As Integer) As Integer Const SRCCOPY As Integer = &HCC0020 Private Background As Bitmap Private fw, fh As Integer ---------------------------------------------------------------------------------------------------------------- Protected Sub CaptureScreen() Dim hsdc, hmdc As Integer Dim hbmp, hbmpold As Integer Dim r As Integer hsdc = CreateDC("DISPLAY", "", "", "") hmdc = CreateCompatibleDC(hsdc) fw = GetDeviceCaps(hsdc, 8) fh = GetDeviceCaps(hsdc, 10) hbmp = CreateCompatibleBitmap(hsdc, fw, fh) hbmpold = SelectObject(hmdc, hbmp) r = BitBlt(hmdc, 0, 0, fw, fh, hsdc, 0, 0, 13369376) hbmp = SelectObject(hmdc, hbmpold) r = DeleteDC(hsdc) r = DeleteDC(hmdc) Background = Image.FromHbitmap(New IntPtr(hbmp)) DeleteObject(hbmp) End Sub ----------------------------------------------------------------------------------------------------------------- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Start() End Sub ------------------------------------------------------------------------------------------------------------------ Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick CaptureScreen() Background.Save("\PrintScreen.jpeg") No evento do Timer1 o CaptureScreen() é o que faz o PrintScreen e asseguir a isso queria redimensionar a variável "Background" (que é a imagem do PrintScreen) para depois continuar com o "Save" ( guarda a imagem no directório ). Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 28, 2009 at 09:45 AM Report Share #302710 Posted December 28, 2009 at 09:45 AM Oh diabo, e precisas lá de ir falar directamente com a GDI! A framework é o intermediário perfeito. Dim Fonte As Bitmap = Me.Icon.ToBitmap Dim Alvo As New Bitmap(200, 200) Dim g As Graphics = Graphics.FromImage(Alvo) g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic g.DrawImage(Fonte, New Rectangle(0, 0, Alvo.Width, Alvo.Height)) Alvo.Save("c:\grande.bmp") Sendo "Fonte" a imagem base, que pode ser obtida de todas as formas permitidas na classe "Bitmap" e Bitmap(200,200) os novos valores para o bitmap. Só precisas de aplicar um codec no método Save para ires de encontro ao formato que pretendes. Lá mais para o final do ano vou libertar aqui uma biblioteca de manipulação de imagem, à partida com código aberto, e vais ver que a framework tem quase tudo o que precisas 😕 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
bigboy123 Posted December 28, 2009 at 02:19 PM Author Report Share #302772 Posted December 28, 2009 at 02:19 PM Eu quero usar a GDI porque apartir do framework ah sistemas que a printscreen fica a preto e não mostra a imagem que foi tirada. Podes dizer-me como gravo o background em vez do exemplo do icon que usas-te ? 😕 Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 28, 2009 at 02:30 PM Report Share #302774 Posted December 28, 2009 at 02:30 PM Eu quero usar a GDI porque apartir do framework ah sistemas que a printscreen fica a preto e não mostra a imagem que foi tirada. Nunca me aconteceu. A não ser que estejas a tentar capturar video comprimido. Quanto à dúvida, um dos overloads do construtor da classe Bitmap aceita Image. Basta portanto substituír: Dim Fonte As Bitmap = Me.Icon.ToBitmap por Dim b As New Bitmap(Background) Mas, segundo o teu código, a tua Background até já é um bitmap... logo basta: Dim Fonte As Bitmap = Background Ou isso ou trocar todos os sítios onde tem "Fonte" para "Background" Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
bigboy123 Posted December 28, 2009 at 02:46 PM Author Report Share #302781 Posted December 28, 2009 at 02:46 PM Com "Dim Fonte As Bitmap = Background" da-me erro na linha de código "g.DrawImage(Fonte, New Rectangle(0, 0, Alvo.Width, Alvo.Height))" (Object reference not set to an instance of an object.) Mas de qualquer maneira se com a primeira resposta conseguires em vez do icon capturar a imagem do screen agradecia-te 😕 Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 28, 2009 at 02:51 PM Report Share #302783 Posted December 28, 2009 at 02:51 PM Se te vem isso é porque a tua variável "Background" vem vazia. Verifica se não é isso que acontece, através de step-debug. Basta que a variável "Fonte" represente um Bitmap válido e não nulo para que funcione na perfeição. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
bigboy123 Posted December 28, 2009 at 03:06 PM Author Report Share #302788 Posted December 28, 2009 at 03:06 PM Faltava-me o CaptureScreen() LOOOOL ! Problema solved 😛 Obrigado, foste uma grande ajuda 😕🙂😄👍 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now