@@ -20,6 +20,7 @@ public class Main
20
20
bool playing = false ;
21
21
int quality = 100 ;
22
22
int moniter_index = - 1 ;
23
+ double scale = 1 ;
23
24
public async Task Run ( Node node )
24
25
{
25
26
await node . SendAsync ( new byte [ ] { 3 } ) ; //indicate that it has connected
@@ -115,7 +116,6 @@ public async Task Run(Node node)
115
116
}
116
117
else if ( data [ 0 ] == 11 )
117
118
{
118
-
119
119
int x = node . sock . BytesToInt ( await node . ReceiveAsync ( ) ) ;
120
120
int y = node . sock . BytesToInt ( await node . ReceiveAsync ( ) ) ;
121
121
Point coords = new Point ( x + Screen . AllScreens [ moniter_index ] . Bounds . X , y + Screen . AllScreens [ moniter_index ] . Bounds . Y ) ;
@@ -126,6 +126,10 @@ public async Task Run(Node node)
126
126
int keyCode = node . sock . BytesToInt ( await node . ReceiveAsync ( ) ) ;
127
127
InputHandler . SimulateKeyPress ( keyCode ) ;
128
128
}
129
+ else if ( data [ 0 ] == 13 )
130
+ {
131
+ scale = ( double ) node . sock . BytesToInt ( await node . ReceiveAsync ( ) ) / 10000.0 ;
132
+ }
129
133
}
130
134
catch ( Exception ex )
131
135
{
@@ -158,7 +162,7 @@ public async Task ScreenShotThread()
158
162
159
163
byte [ ] data = await Task . Run ( ( ) =>
160
164
{
161
- return ScreenshotTaker . TakeScreenshot ( quality , moniter_index , true ) ;
165
+ return ScreenshotTaker . TakeScreenshot ( quality , moniter_index , true , scale ) ;
162
166
} ) ;
163
167
await ImageNode . SendAsync ( data ) ;
164
168
}
@@ -328,7 +332,7 @@ struct POINTAPI
328
332
329
333
const Int32 CURSOR_SHOWING = 0x00000001 ;
330
334
331
- public static byte [ ] TakeScreenshot ( int quality , int screenIndex , bool captureCursor )
335
+ public static byte [ ] TakeScreenshot ( int quality , int screenIndex , bool captureCursor , double scaleImageSize = 1 )
332
336
{
333
337
Screen [ ] screens = Screen . AllScreens ;
334
338
@@ -346,37 +350,41 @@ public static byte[] TakeScreenshot(int quality, int screenIndex, bool captureCu
346
350
int screenWidth = ( int ) ( selectedScreen . Bounds . Width * scalingFactor ) ;
347
351
int screenHeight = ( int ) ( selectedScreen . Bounds . Height * scalingFactor ) ;
348
352
349
- using ( Bitmap bitmap = new Bitmap ( screenWidth , screenHeight , PixelFormat . Format24bppRgb ) )
353
+ Bitmap bitmap = new Bitmap ( screenWidth , screenHeight , PixelFormat . Format24bppRgb ) ;
354
+ using ( Graphics graphics = Graphics . FromImage ( bitmap ) )
350
355
{
351
- using ( Graphics graphics = Graphics . FromImage ( bitmap ) )
356
+ graphics . CopyFromScreen ( screenLeft , screenTop , 0 , 0 , bitmap . Size , CopyPixelOperation . SourceCopy ) ;
357
+
358
+ if ( captureCursor )
352
359
{
353
- graphics . CopyFromScreen ( screenLeft , screenTop , 0 , 0 , bitmap . Size , CopyPixelOperation . SourceCopy ) ;
360
+ CURSORINFO pci ;
361
+ pci . cbSize = Marshal . SizeOf ( typeof ( CURSORINFO ) ) ;
354
362
355
- if ( captureCursor )
363
+ if ( GetCursorInfo ( out pci ) )
356
364
{
357
- CURSORINFO pci ;
358
- pci . cbSize = Marshal . SizeOf ( typeof ( CURSORINFO ) ) ;
359
-
360
- if ( GetCursorInfo ( out pci ) )
365
+ if ( pci . flags == CURSOR_SHOWING )
361
366
{
362
- if ( pci . flags == CURSOR_SHOWING )
363
- {
364
- DrawIcon ( graphics . GetHdc ( ) , pci . ptScreenPos . x - screenLeft , pci . ptScreenPos . y - screenTop , pci . hCursor ) ;
365
- graphics . ReleaseHdc ( ) ;
366
- }
367
+ DrawIcon ( graphics . GetHdc ( ) , pci . ptScreenPos . x - screenLeft , pci . ptScreenPos . y - screenTop , pci . hCursor ) ;
368
+ graphics . ReleaseHdc ( ) ;
367
369
}
368
370
}
371
+ }
369
372
370
- EncoderParameters encoderParams = new EncoderParameters ( 1 ) ;
371
- encoderParams . Param [ 0 ] = new EncoderParameter ( System . Drawing . Imaging . Encoder . Quality , quality ) ;
372
-
373
- ImageCodecInfo codecInfo = GetEncoderInfo ( ImageFormat . Jpeg ) ;
373
+ EncoderParameters encoderParams = new EncoderParameters ( 1 ) ;
374
+ encoderParams . Param [ 0 ] = new EncoderParameter ( System . Drawing . Imaging . Encoder . Quality , quality ) ;
374
375
375
- using ( MemoryStream stream = new MemoryStream ( ) )
376
- {
377
- bitmap . Save ( stream , codecInfo , encoderParams ) ;
378
- return stream . ToArray ( ) ;
379
- }
376
+ ImageCodecInfo codecInfo = GetEncoderInfo ( ImageFormat . Jpeg ) ;
377
+ if ( scaleImageSize != 1 )
378
+ {
379
+ Bitmap resized = new Bitmap ( bitmap , new Size ( ( int ) ( bitmap . Width * scaleImageSize ) , ( int ) ( bitmap . Height * scaleImageSize ) ) ) ;
380
+ bitmap . Dispose ( ) ;
381
+ bitmap = resized ;
382
+ }
383
+ using ( MemoryStream stream = new MemoryStream ( ) )
384
+ {
385
+ bitmap . Save ( stream , codecInfo , encoderParams ) ;
386
+ bitmap . Dispose ( ) ;
387
+ return stream . ToArray ( ) ;
380
388
}
381
389
}
382
390
}
0 commit comments