mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-04-04 23:39:26 +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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|