UWUVCI-AIO-WPF/UWUVCI AIO WPF/Classes/BootImage.cs

243 lines
8.1 KiB
C#

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows;
using System.Windows.Media;
using Color = System.Drawing.Color;
using FontFamily = System.Drawing.FontFamily;
using FontStyle = System.Drawing.FontStyle;
using Pen = System.Drawing.Pen;
namespace UWUVCI_AIO_WPF.Classes
{
public class BootImage : IDisposable
{
private bool disposed = false;
private Bitmap _frame;
private Bitmap _titleScreen;
private Font font;
public Bitmap Frame
{
set
{
if (_frame != null)
_frame.Dispose();
_frame = value;
}
get { return _frame; }
}
public Bitmap TitleScreen
{
set
{
if (_titleScreen != null)
_titleScreen.Dispose();
_titleScreen = value;
}
get { return _titleScreen; }
}
public string NameLine1;
public string NameLine2;
public int Released;
public int Players;
public bool Longname;
private bool bf = false;
public BootImage()
{
_frame = null;
_titleScreen = null;
NameLine1 = null;
NameLine2 = null;
Released = 0;
Players = 0;
Longname = false;
}
~BootImage()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
if (Frame != null)
{
Frame.Dispose();
Frame = null;
}
if (TitleScreen != null)
{
TitleScreen.Dispose();
TitleScreen = null;
}
}
disposed = true;
}
}
public Bitmap Create(string console)
{
Bitmap img = new Bitmap(1280, 720);
Graphics g = Graphics.FromImage(img);
g.PixelOffsetMode = PixelOffsetMode.Half;
g.SmoothingMode = SmoothingMode.AntiAlias;
g.CompositingMode = CompositingMode.SourceOver;
g.CompositingQuality = CompositingQuality.HighQuality;
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
g.Clear(Color.White);
System.Drawing.Text.PrivateFontCollection privateFonts = new System.Drawing.Text.PrivateFontCollection();
privateFonts.AddFontFile(@"bin\Tools\font.otf");
if (bf)
{
font = new Font("Trebuchet MS", 10.0F, System.Drawing.FontStyle.Bold, GraphicsUnit.Point);
}
else
{
font = new Font(privateFonts.Families[0], 10.0F, FontStyle.Regular, GraphicsUnit.Point);
}
SolidBrush brush = new SolidBrush(Color.FromArgb(32, 32, 32));
Pen outline = new Pen(System.Drawing.Color.FromArgb(222, 222, 222), 4.0F);
Pen shadow = new Pen(Color.FromArgb(190, 190, 190), 6.0F);
StringFormat format = new StringFormat();
Rectangle rectangleGBA = new Rectangle(132, 260, 399, 266);
Rectangle rectangleGBC = new Rectangle(183, 260, 296, 266);
Rectangle rectangleH4V3 = new Rectangle(131, 249, 400, 300);
// Rectangle rectanglewii = new Rectangle(224, 201, 832, 332);
Rectangle rectanglewii = new Rectangle(224, 200, 832, 333);
if (console == "GBA")
{
if (TitleScreen != null)
g.DrawImage(TitleScreen, rectangleGBA);
else
g.FillRectangle(new SolidBrush(Color.Black), rectangleGBA);
}
else if (console == "GBC")
{
if (TitleScreen != null)
g.DrawImage(TitleScreen, rectangleGBC);
else
g.FillRectangle(new SolidBrush(Color.Black), rectangleGBC);
}
else if (console == "NDS")
{
if (TitleScreen != null)
{
g.DrawImage(TitleScreen, rectangleH4V3);
}
else
g.FillRectangle(new SolidBrush(Color.Black), rectangleH4V3);
}
else if(console == "WII")
{
if (TitleScreen != null)
g.DrawImage(TitleScreen, rectanglewii);
else
g.FillRectangle(new SolidBrush(Color.Black), rectanglewii);
}
else
{
if (TitleScreen != null)
g.DrawImage(TitleScreen, rectangleH4V3);
else
g.FillRectangle(new SolidBrush(Color.Black), rectangleH4V3);
}
if (Frame != null)
g.DrawImage(Frame, new Rectangle(0, 0, 1280, 720));
if (NameLine1 != null && NameLine2 != null)
{
Pen outlineBold = new Pen(Color.FromArgb(222, 222, 222), 5.0F);
Pen shadowBold = new Pen(Color.FromArgb(190, 190, 190), 7.0F);
Rectangle rectangleNL1 = Longname ? new Rectangle(578, 313, 640, 50) : new Rectangle(578, 340, 640, 50);
Rectangle rectangleNL2 = new Rectangle(578, 368, 640, 50);
GraphicsPath nl1 = new GraphicsPath();
GraphicsPath nl2 = new GraphicsPath();
if (Longname)
{
nl1.AddString(NameLine1, font.FontFamily,
(int)(FontStyle.Bold),
g.DpiY * 37.0F / 72.0F, rectangleNL1, format);
g.DrawPath(shadowBold, nl1);
g.DrawPath(outlineBold, nl1);
g.FillPath(brush, nl1);
nl2.AddString(NameLine2, font.FontFamily,
(int)(FontStyle.Bold),
g.DpiY * 37.0F / 72.0F, rectangleNL2, format);
g.DrawPath(shadowBold, nl2);
g.DrawPath(outlineBold, nl2);
g.FillPath(brush, nl2);
}
else
{
nl1.AddString(NameLine1, font.FontFamily,
(int)(FontStyle.Bold),
g.DpiY * 37.0F / 72.0F, rectangleNL1, format);
g.DrawPath(shadowBold, nl1);
g.DrawPath(outlineBold, nl1);
g.FillPath(brush, nl1);
}
}
if (Released > 0)
{
GraphicsPath r = new GraphicsPath();
r.AddString("Released: " + Released.ToString(), font.FontFamily,
(int)(FontStyle.Regular),
g.DpiY * 25.0F / 72.0F, new Rectangle(586, 450, 300, 40), format);
g.DrawPath(shadow, r);
g.DrawPath(outline, r);
g.FillPath(brush, r);
}
if (Players > 0)
{
string pStr = Players >= 4 ? "1-4" : Players == 3 ? "1-3" : Players == 2 ? "1-2" : "1";
GraphicsPath p = new GraphicsPath();
p.AddString("Players: " + pStr, font.FontFamily,
(int)(FontStyle.Regular),
g.DpiY * 25.0F / 72.0F, new Rectangle(586, 496, 400, 40), format);
g.DrawPath(shadow, p);
g.DrawPath(outline, p);
g.FillPath(brush, p);
}
return img;
}
public void changefont(bool t)
{
if (t)
{
bf = true;
}
else
{
bf = false;
}
}
}
}