Консультация № 162560
17.03.2009, 12:01
0.00 руб.
0 3 1
Здравствуйте уважаемые эксперты. Написал функцию сохранения части изображения окна в файл по хэндлу окна. Но вот проблема если эта часть окна например находиться за пределами окна то просто сохраняется белый прямоугольник. Если окно перекрыто другим окном то сохраняется часть верхнего окна. Как получить изображение именно того окна которое мне нужно??? Не зависимо в каком состоянии оно находиться…
Код функции в приложении. Заранее спасибо!


Приложение:
function SaveImage(const AHandle: THandle; Width,Heigth,XSrc,YSrc:integer;FileName:String): Boolean;
var
fImage : TBitmap;
DC : HDC;
begin
Result := false;
if (Width < 1) or (Heigth < 1) then
exit;
if (XSrc < 0) or (YSrc < 0) then
exit;
DC := GetDC(AHandle);
if DC <> 0 then
try
fImage := TBitmap.Create;
fImage.Width := Width;
fImage.Height := Heigth;
fImage.PixelFormat := pf32bit;
result := BitBlt(fImage.Canvas.Handle,0,0,fImage.Width,fImage.Height,DC,XSrc,YSrc,SRCCOPY);
if result then
fImage.SaveToFile(FileName);
fImage.Free;
finally
ReleaseDC(AHandle,DC);
end;
end;

Обсуждение

Неизвестный
17.03.2009, 14:09
общий
это ответ
Здравствуйте, PaTiFoN!

procedure TForm1.Button1Click(Sender: TObject);
var
fImage : TBitmap;
begin
fImage := GetFormImage;
fImage.SaveToFile('c:\test.bmp');
fImage.Free;
end;
Неизвестный
18.03.2009, 17:18
общий
Ответ: практически никак - GDI оптимизировано так, чтобы не рисовать невидимые части окна. Так что увы :(. Если найдете способ - поделитесь. Я знаю один, но частный и трудоемкий - с перехватом команд рисования GDI от выбранного приложения.
Неизвестный
19.03.2009, 08:13
общий
Спасибо
Форма ответа