Avatar billede angelod Novice
17. marts 2003 - 22:27 Der er 5 kommentarer og
1 løsning

Gemme billede fra kontrol uden canvas?

Ja davs, så er jeg her igen. :o)

Jeg sidder og prøver forgæves på at gemme et billede fra en komponent uden Canvas, nærmere bestemt en TPanel.

Jeg skal bruge det for at hive screenshots ud fra videofiler, som jeg åbner med TMediaPlayer.

Jeg håber at en eller anden kan hjælpe. :o)
Avatar billede dkn Nybegynder
17. marts 2003 - 22:42 #1
http://www.eksperten.dk/spm/27577

Du skal tilgå den som en wincontrol
Avatar billede angelod Novice
17. marts 2003 - 23:02 #2
Jeg afprøver det lige. Ser ud til at være det jeg leder efter, men vil da lige være sikker. ;)
Avatar billede dkn Nybegynder
17. marts 2003 - 23:35 #3
bare iorden :)
Avatar billede angelod Novice
18. marts 2003 - 00:01 #4
Okay.. Enten forstår jeg ikke hvad der menes, eller også er det et forkert svar.. Jeg afviser det nu, men du er velkommen til at fortælle mig hvordan jeg kan rette det..

Jeg poster lige det jeg har lavet indtil videre.. 'mp' refererer til en TMediaPlayer komponent der er åbnet med et klip.

procedure TForm1.Button2Click(Sender: TObject);
var
  bmpBitmap: TBitmap;
begin
  Panel1.Width := mp.DisplayRect.Right - mp.DisplayRect.Left;
  Panel1.Height := mp.DisplayRect.Bottom - mp.DisplayRect.Top;
  mp.TimeFormat := tfFrames;
  mp.Position := mp.Length div 2;

  bmpBitmap := TBitmap.Create;
  try
    try
      with bmpBitmap do
      begin
        Width := Panel1.Width;
        Height := Panel1.Height;
        Canvas.Brush := Panel1.Brush;
        Canvas.FillRect(Panel1.ClientRect);
        Canvas.Lock;
        try
          Panel1.PaintTo(Canvas, 0, 0);
        finally
          Canvas.Unlock;
        end;

        SaveToFile('g:\testbmp.bmp');
      end;
    except
      on Exception do
      begin
      end;
    end;
  finally
    bmpBitmap.Free;
  end;
end;
Avatar billede dkn Nybegynder
18. marts 2003 - 00:13 #5
jeg har ikke testet dit, og jeg ved heller ikke om det er fordi wma bruger opengl/directx at det måske ikke virker for dig.

Men denne test virkede perfekt for mig:

function GetWinControlImage(Source: TWinControl): TBitmap;
begin
  Result := TBitmap.Create;
  try
    Result.Width := Source.Width;
    Result.Height := Source.Height;
    Result.Canvas.Brush := Source.Brush;
    Result.Canvas.FillRect(Source.ClientRect);
    Result.Canvas.Lock;
    try
      Source.PaintTo(Result.Canvas.Handle, 0 - Source.Left, 0 - Source.Top);
    finally
      Result.Canvas.Unlock;
    end;
  except
    Result.Free;
    raise;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  pic: tbitmap;
begin
  pic := tbitmap.Create;
  pic.Assign(GetWinControlImage(Panel1));
  pic.SaveToFile('C:\test.bmp');
  pic.Free;
end;
Avatar billede angelod Novice
18. marts 2003 - 00:37 #6
Hmm.. Jeg lukker lige, og åbner et andet der formulerer mit behov anderledes (ergo, det er ikke det samme spørgsmål). Må jo nok hellere indsnævre min beskrivelse en smule. :o)
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