Avatar billede hlj Nybegynder
15. december 1999 - 22:22 Der er 8 kommentarer og
1 løsning

Gemme grafikområde i fil

Hvad er den smarteste måde at gemme er skærmområde, som bitmap, i en fil.

Området behøves ikke at tilhøre ens eget program, men kan f.eks. være Desktoppen, et andet program eller en kombination af begge.

Det er da ikke umiddelbart muligt at bruge TCanvas til dette, så hvad kan man ellers bruge?
Avatar billede retep Nybegynder
16. december 1999 - 01:04 #1
Huh??? Hvad er det lige du vil? Vil du loade en bitmap i dit program eller hvad er det du vil?

Hvis du bare vil vise en BMP-fil, kan du bruge TImage.
Avatar billede hlj Nybegynder
16. december 1999 - 15:08 #2
Jeg vil gemme et virkårligt område af skærmen som BMP-fil.

Avatar billede snorga Nybegynder
16. december 1999 - 17:57 #3
HDC'en..

Du kommer selv til at finde ud af at findet et rette handle til det vindue du vil "capture" med mindre at det er desktopen :)
-----------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  //Capture
  Temp: TBitmap;
  d: HDC;
  h: HWND;
  R: TRect;
  X, Y: integer;
  PChar: Array[0..255] of Char;
begin
  Temp := TBitmap.Create;

  //Skaf handle
  If False then
    //Det aktive windue
    h := GetForegroundWindow
  else
    //Desktopen
    h := GetDesktopWindow;
  //Vinduets navn
  GetWindowText(h, pchar, 255);
  //Hent vinduets DeviceContext
  d := GetDC(h);
  //Hent vinduets størrelse
  Windows.GetClientRect(h, r);          //GetWindowRect
  x := r.Right - r.Left;
  y := r.Bottom - r.Top;
  //Sæt image'et til at passe
  Temp.Width := x;
  Temp.Height := y;
  //Tegn billede
  bitblt(Temp.Canvas.Handle, 0, 0 , x, y, d, 0, 0, srccopy);

  Temp.Dormant;
  Temp.SaveToFile('Filename.bmp');
//  Image1.Picture.Assign(Temp);

  Temp.Free;
end;
Avatar billede hlj Nybegynder
16. december 1999 - 19:36 #4
snorga > Og hvis det nu skulle være en delvis overlapning af både desktop og et program vindue?

Er der en mulighed for at aktivere Print Screen funktionen, så man kan få et screen shot placeret på clipboarded og så tage dataerne derfra?
Avatar billede snorga Nybegynder
16. december 1999 - 21:45 #5
Capture du desktopen kommer de vinduer der er åbne også med på billedet.

Capture desktopen,
ændre
  bitblt(Temp.Canvas.Handle, 0, 0 , x, y, d, 0, 0, srccopy);
så den kopier det rigtige område..
Du skal selvfølge også lige ændre temp's widht/height så den passer med området. Det skulle kunne lade sig gøre.
Avatar billede hlj Nybegynder
16. december 1999 - 22:41 #6
snorga> Det vil jeg prøve. Der går lige et par dage inden jeg får det afprøvet, men virker det er pointene dine.
Avatar billede snorga Nybegynder
17. december 1999 - 01:05 #7
Okay.. Det virker fint for mig såå :)
Avatar billede hlj Nybegynder
20. december 1999 - 21:50 #8
snorga> Sådan gøres det, pointene der dine.
Avatar billede snorga Nybegynder
20. december 1999 - 22:14 #9
Tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester