/* * Copyright (c) 2024 ETH Zürich, IT Services * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ using System; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; using KGySoft.Drawing.Imaging; using SafeExamBrowser.Settings.Proctoring; using ImageFormat = SafeExamBrowser.Settings.Proctoring.ImageFormat; namespace SafeExamBrowser.Proctoring.ScreenProctoring.Imaging { internal static class Extensions { internal static void DrawCursorPosition(this Graphics graphics) { graphics.DrawArc(new Pen(Color.Red, 3), Cursor.Position.X - 25, Cursor.Position.Y - 25, 50, 50, 0, 360); graphics.DrawArc(new Pen(Color.Yellow, 3), Cursor.Position.X - 22, Cursor.Position.Y - 22, 44, 44, 0, 360); graphics.FillEllipse(Brushes.Red, Cursor.Position.X - 4, Cursor.Position.Y - 4, 8, 8); graphics.FillEllipse(Brushes.Yellow, Cursor.Position.X - 2, Cursor.Position.Y - 2, 4, 4); } internal static PixelFormat ToPixelFormat(this ImageQuantization quantization) { switch (quantization) { case ImageQuantization.BlackAndWhite1bpp: return PixelFormat.Format1bppIndexed; case ImageQuantization.Color8bpp: return PixelFormat.Format8bppIndexed; case ImageQuantization.Color16bpp: return PixelFormat.Format16bppArgb1555; case ImageQuantization.Color24bpp: return PixelFormat.Format24bppRgb; case ImageQuantization.Grayscale2bpp: return PixelFormat.Format4bppIndexed; case ImageQuantization.Grayscale4bpp: return PixelFormat.Format4bppIndexed; case ImageQuantization.Grayscale8bpp: return PixelFormat.Format8bppIndexed; default: throw new NotImplementedException($"Image quantization '{quantization}' is not yet implemented!"); } } internal static IQuantizer ToQuantizer(this ImageQuantization quantization) { switch (quantization) { case ImageQuantization.BlackAndWhite1bpp: return PredefinedColorsQuantizer.BlackAndWhite(); case ImageQuantization.Color8bpp: return PredefinedColorsQuantizer.SystemDefault8BppPalette(); case ImageQuantization.Color16bpp: return PredefinedColorsQuantizer.Rgb555(); case ImageQuantization.Color24bpp: return PredefinedColorsQuantizer.Rgb888(); case ImageQuantization.Grayscale2bpp: return PredefinedColorsQuantizer.Grayscale4(); case ImageQuantization.Grayscale4bpp: return PredefinedColorsQuantizer.Grayscale16(); case ImageQuantization.Grayscale8bpp: return PredefinedColorsQuantizer.Grayscale(); default: throw new NotImplementedException($"Image quantization '{quantization}' is not yet implemented!"); } } internal static System.Drawing.Imaging.ImageFormat ToSystemFormat(this ImageFormat format) { switch (format) { case ImageFormat.Bmp: return System.Drawing.Imaging.ImageFormat.Bmp; case ImageFormat.Gif: return System.Drawing.Imaging.ImageFormat.Gif; case ImageFormat.Jpg: return System.Drawing.Imaging.ImageFormat.Jpeg; case ImageFormat.Png: return System.Drawing.Imaging.ImageFormat.Png; default: throw new NotImplementedException($"Image format '{format}' is not yet implemented!"); } } } }