mirror of
				https://gitee.com/csharpui/CPF.git
				synced 2025-11-01 00:46:56 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using CPF.Drawing;
 | |
| using CPF.Mac.AppKit;
 | |
| using CPF.Platform;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using CPF.Mac.CoreGraphics;
 | |
| 
 | |
| namespace CPF.Mac
 | |
| {
 | |
|     class ScreenImpl : Screen
 | |
|     {
 | |
|         public ScreenImpl(NSScreen screen, Rect bounds, Rect workingArea, bool primary) : base(bounds, workingArea, primary)
 | |
|         {
 | |
|             this.screen = screen;
 | |
|         }
 | |
|         NSScreen screen;
 | |
| 
 | |
|         public unsafe override Bitmap Screenshot()
 | |
|         {
 | |
|             using (var img = new CGImage(CGImage.CGWindowListCreateImage(screen.Frame, CGWindowListOption.All, 0, CGWindowImageOption.Default), owns: true))
 | |
|             {
 | |
|                 //CGImage imageRef = CGImage.CGWindowListCreateImage(mainRect, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageNominalResolution | kCGWindowImageShouldBeOpaque);
 | |
|                 var height = img.Height;
 | |
|                 var width = img.Width;
 | |
|                 var bpr = img.BytesPerRow;
 | |
|                 var bpp = img.BitsPerPixel;
 | |
|                 var bpc = img.BitsPerComponent;
 | |
|                 var bytes_per_pixel = bpp / bpc;
 | |
| 
 | |
|                 using (var data = img.DataProvider.CopyData())
 | |
|                 {
 | |
|                     var bitmap = new Bitmap(img.Width, img.Height);
 | |
|                     var bytes = (byte*)data.Bytes;
 | |
|                     using (var b = bitmap.Lock())
 | |
|                     {
 | |
|                         for (var row = 0; row < height; row++)
 | |
|                         {
 | |
|                             for (var col = 0; col < width; col++)
 | |
|                             {
 | |
|                                 var pixel = &bytes[row * bpr + col * bytes_per_pixel];
 | |
| 
 | |
|                                 b.SetPixel(col, row, pixel[3], pixel[2], pixel[1], pixel[0]);
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                     return bitmap;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
