Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
Валера   (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 вся ветка

Форум: "KOL";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
15-1302303058
Германн
2011-04-09 02:50
2011.07.31
Build vs Compile


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


3-1262078102
ocean
2009-12-29 12:15
2011.07.31
Как правильно создавать таблицу?


15-1302428314
ddd329
2011-04-10 13:38
2011.07.31
С Win32 на .NET


2-1303453840
JohnKorsh
2011-04-22 10:30
2011.07.31
Простой вопрос по использованию DLL.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский