Add GraphicsExtensions and move GraphicsConfig

This commit is contained in:
miku-666
2023-04-09 18:34:23 +02:00
parent 59cd8575b1
commit 0e12fd5a8e
4 changed files with 44 additions and 29 deletions

View File

@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
namespace PckStudio.Extensions
{
public struct GraphicsConfig
{
public GraphicsConfig()
{
CompositingQuality = CompositingQuality.Default;
InterpolationMode = InterpolationMode.Default;
SmoothingMode = SmoothingMode.Default;
PixelOffsetMode = PixelOffsetMode.Default;
}
public CompositingMode CompositingMode { get; set; }
public CompositingQuality CompositingQuality { get; set; }
public InterpolationMode InterpolationMode { get; set; }
public SmoothingMode SmoothingMode { get; set; }
public PixelOffsetMode PixelOffsetMode { get; set; }
}
internal static class GraphicsExtensions
{
public static void ApplyConfig(this Graphics graphics, GraphicsConfig config)
{
graphics.CompositingMode = config.CompositingMode;
graphics.CompositingQuality = config.CompositingQuality;
graphics.InterpolationMode = config.InterpolationMode;
graphics.SmoothingMode = config.SmoothingMode;
graphics.PixelOffsetMode = config.PixelOffsetMode;
}
}
}

View File

@@ -1,12 +1,10 @@
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System;
using System.Drawing;
using System.Diagnostics;
using System;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Media.Media3D;
using System.Web;
namespace PckStudio.Extensions
{
@@ -110,25 +108,6 @@ namespace PckStudio.Extensions
return new Size(width, heigh);
}
public struct GraphicsConfig
{
public CompositingMode CompositingMode { get; set; }
public CompositingQuality CompositingQuality { get; set; }
public InterpolationMode InterpolationMode { get; set; }
public SmoothingMode SmoothingMode { get; set; }
public PixelOffsetMode PixelOffsetMode { get; set; }
public void Apply(Graphics graphics)
{
graphics.CompositingMode = CompositingMode;
graphics.CompositingQuality = CompositingQuality;
graphics.InterpolationMode = InterpolationMode;
graphics.SmoothingMode = SmoothingMode;
graphics.PixelOffsetMode = PixelOffsetMode;
}
}
public static Image ResizeImage(this Image image, int width, int height, GraphicsConfig graphicsConfig)
{
var destRect = new Rectangle(0, 0, width, height);
@@ -138,7 +117,7 @@ namespace PckStudio.Extensions
using (var graphics = Graphics.FromImage(destImage))
{
graphicsConfig.Apply(graphics);
graphics.ApplyConfig(graphicsConfig);
using (var wrapMode = new ImageAttributes())
{
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
@@ -169,7 +148,6 @@ namespace PckStudio.Extensions
public static Image Blend(this Image image, Image overlay, BlendMode mode)
{
Stopwatch stopwatch = Stopwatch.StartNew();
if (image is not Bitmap baseImage || overlay is not Bitmap overlayImage)
return image;
BitmapData baseImageData = baseImage.LockBits(new Rectangle(Point.Empty, baseImage.Size),
@@ -200,8 +178,6 @@ namespace PckStudio.Extensions
bitmapResult.UnlockBits(resultImageData);
baseImage.UnlockBits(baseImageData);
overlayImage.UnlockBits(overlayImageData);
stopwatch.Stop();
Debug.WriteLine($"{nameof(ImageExtensions.Blend)} took {stopwatch.ElapsedMilliseconds}ms");
return bitmapResult;
}

View File

@@ -1027,7 +1027,7 @@ namespace PckStudio.Forms
{
var ms = new MemoryStream(skinTexture.Data);
Bitmap saveSkin = new Bitmap(Image.FromStream(ms));
var config = new ImageExtensions.GraphicsConfig()
var config = new GraphicsConfig()
{
CompositingMode = CompositingMode.SourceCopy,
CompositingQuality = CompositingQuality.HighQuality,

View File

@@ -172,6 +172,7 @@
<Compile Include="Classes\API\PCKCenter\SaveLocalJSON.cs" />
<Compile Include="Classes\Extensions\BlendMode.cs" />
<Compile Include="Classes\Extensions\EnumerableExtensions.cs" />
<Compile Include="Classes\Extensions\GraphicsExtensions.cs" />
<Compile Include="Classes\FileTypes\CSMBFile.cs" />
<Compile Include="Classes\FileTypes\PCKAudioFile.cs" />
<Compile Include="Classes\FileTypes\Binka.cs" />