Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.31;
Скачать: CL | DM;

Вниз

Проблема с скриншотом экрана   Найти похожие ветки 

 
Валера   (2008-11-23 07:59) [0]

Как сделать скриншот и сохранить его в PNG а потом сохранить в PStream ?

Особенно интересует сохранение в PNG и сохранение в STREAM.


 
Валера   (2008-11-23 08:01) [1]

Вот похожий код на VCL

function GetDesktopBitmap: HBitmap;
var
 DC, MemDC: HDC;
 Bitmap, OBitmap: HBitmap;
 BitmapWidth, BitmapHeight: integer;
begin
 DC := GetDC(GetDesktopWindow);
 MemDC := CreateCompatibleDC(DC);
 BitmapWidth := GetDeviceCaps(DC, 8);
 BitmapHeight := GetDeviceCaps(DC, 10);
 Bitmap := CreateCompatibleBitmap(DC, BitmapWidth, BitmapHeight);
 OBitmap := SelectObject(MemDC, Bitmap);
 BitBlt(MemDC, 0, 0, BitmapWidth, BitmapHeight, DC, 0, 0, SRCCOPY);
 SelectObject(MemDC, OBitmap);
 DeleteDC(MemDC);
 ReleaseDC(GetDesktopWindow, DC);
 Result := Bitmap;
end;

procedure Capture();
var
PNGObject : TPNGObject;
begin
 PngObject := TPngObject.Create;
 PngObject.AssignHandle(GetDesktopBitmap, False, 0);
 PngObject.CompressionLevel := 9;
 PngObject.SaveToFile("shot.png");
 PngObject.Free;
end;


 
Vladimir Kladov ©   (2008-11-23 09:07) [2]

Посмотрите приложение GrabScreen на kolmck.net. Там всё это есть.


 
Валера   (2008-11-23 19:36) [3]

Делаю скриншот при помощи функции из KOLMRBAdditions

function FullScreenShot(PixelFormat: TPixelFormat): PBitmap;
var
 DC : HDC;
begin
DC := GetDC (GetDesktopWindow);
try
 Result:= NewDIBBitmap(
 GetDeviceCaps (DC, HORZRES),
 GetDeviceCaps (DC, VERTRES),
 PixelFormat);
 BitBlt(Result.Canvas.Handle,
        0,
        0,
        Result.Width,
        Result.Height,
        DC,
        0,
        0,
        SRCCOPY);
finally
 ReleaseDC (GetDesktopWindow, DC);
end;
end;

Сохраняю так

       PNG:=NewPngObject;
       try
         PNG.AssignHandle(FullScreenShot(pf32bit).Handle,false,0);
         ScreenStream:=NewMemoryStream;
         PNG.SaveToStream(ScreenStream);
         ScreenStream.Position:=0;
         SendCommand(COMMAND_SEND_SIZE_SCREEN,
           [Int2Str(ScreenStream.Size),Parameters[0]],ClientIndex);
       finally
         PNG.Destroy;
       end;

Мне интересно можно ли сделать тоже самое но не создавать NewDIBBitmap


 
dron9999 ©   (2009-03-02 20:24) [4]

var
Ext, Filename : string;
      Png: PPngObject;
      DC: HDC;
      Format: TPixelFormat;
begin
Filename:= "1.png";
//  Form.Visible := FALSE;
 DC := GetDC(0);
 case GetDeviceCaps( DC, BITSPIXEL ) of
 1, 4, 8, 15, 16 : Format := pf16bit;
 else {24, 32:} Format := pf24bit;
 end;
 Bmp.Free;
bmp := NewDIBBitmap( R.Right - R.Left, R.Bottom - R.Top, Format );
 BitBlt( Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, DC, R.Left, R.Top, SRCCOPY );
 ReleaseDC( 0, DC );
//*******************************************************************
Ext := LowerCase( ExtractFileExt( Filename ) );
  if Ext = ".png" then
    begin
      Png := NewPngObject;
       Png.AssignHandle( Bmp.Handle, FALSE, 0 );
       Png.SaveToFile(Filename);
Png.Free;

я так делал !! но тебе нужен uses KOlpng;



Страницы: 1 вся ветка

Текущий архив: 2011.07.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
15-1302604376
БарЛог
2011-04-12 14:32
2011.07.31
Антиусилитель wi-fi сигнала


15-1302640197
Юрий
2011-04-13 00:29
2011.07.31
С днем рождения ! 13 апреля 2011 среда


15-1302588303
OW
2011-04-12 10:05
2011.07.31
Задача определения региона по номеру позвонившего


2-1303805704
mefodiy
2011-04-26 12:15
2011.07.31
Как сделать reset MemTable


15-1302686513
KSergey
2011-04-13 13:21
2011.07.31
Нужен владелец iPhone для наделать скриншоты одной софтины