Image Editor: Add HDR setting for 2D cubemap viewer
This commit is contained in:
parent
b8915393ea
commit
163a348465
@ -39,6 +39,8 @@
|
|||||||
this.btnLeftArray = new Toolbox.Library.Forms.STButton();
|
this.btnLeftArray = new Toolbox.Library.Forms.STButton();
|
||||||
this.pbRightFace = new Toolbox.Library.Forms.PictureBoxCustom();
|
this.pbRightFace = new Toolbox.Library.Forms.PictureBoxCustom();
|
||||||
this.chkDisplayAlpha = new Toolbox.Library.Forms.STCheckBox();
|
this.chkDisplayAlpha = new Toolbox.Library.Forms.STCheckBox();
|
||||||
|
this.displayEncodedHDRAlphaChk = new Toolbox.Library.Forms.STCheckBox();
|
||||||
|
this.gammaUD = new Toolbox.Library.Forms.NumericUpDownFloat();
|
||||||
this.contentContainer.SuspendLayout();
|
this.contentContainer.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbTopFace)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbTopFace)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbFrontFace)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbFrontFace)).BeginInit();
|
||||||
@ -46,11 +48,14 @@
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.pbBottomFace)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbBottomFace)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbBackFace)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbBackFace)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbRightFace)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbRightFace)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.gammaUD)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// contentContainer
|
// contentContainer
|
||||||
//
|
//
|
||||||
this.contentContainer.BackColor = System.Drawing.Color.White;
|
this.contentContainer.BackColor = System.Drawing.Color.White;
|
||||||
|
this.contentContainer.Controls.Add(this.gammaUD);
|
||||||
|
this.contentContainer.Controls.Add(this.displayEncodedHDRAlphaChk);
|
||||||
this.contentContainer.Controls.Add(this.chkDisplayAlpha);
|
this.contentContainer.Controls.Add(this.chkDisplayAlpha);
|
||||||
this.contentContainer.Controls.Add(this.arrayLevelCounterLabel);
|
this.contentContainer.Controls.Add(this.arrayLevelCounterLabel);
|
||||||
this.contentContainer.Controls.Add(this.btnRightArray);
|
this.contentContainer.Controls.Add(this.btnRightArray);
|
||||||
@ -72,6 +77,8 @@
|
|||||||
this.contentContainer.Controls.SetChildIndex(this.btnRightArray, 0);
|
this.contentContainer.Controls.SetChildIndex(this.btnRightArray, 0);
|
||||||
this.contentContainer.Controls.SetChildIndex(this.arrayLevelCounterLabel, 0);
|
this.contentContainer.Controls.SetChildIndex(this.arrayLevelCounterLabel, 0);
|
||||||
this.contentContainer.Controls.SetChildIndex(this.chkDisplayAlpha, 0);
|
this.contentContainer.Controls.SetChildIndex(this.chkDisplayAlpha, 0);
|
||||||
|
this.contentContainer.Controls.SetChildIndex(this.displayEncodedHDRAlphaChk, 0);
|
||||||
|
this.contentContainer.Controls.SetChildIndex(this.gammaUD, 0);
|
||||||
//
|
//
|
||||||
// pbTopFace
|
// pbTopFace
|
||||||
//
|
//
|
||||||
@ -182,6 +189,41 @@
|
|||||||
this.chkDisplayAlpha.UseVisualStyleBackColor = true;
|
this.chkDisplayAlpha.UseVisualStyleBackColor = true;
|
||||||
this.chkDisplayAlpha.CheckedChanged += new System.EventHandler(this.chkDisplayAlpha_CheckedChanged);
|
this.chkDisplayAlpha.CheckedChanged += new System.EventHandler(this.chkDisplayAlpha_CheckedChanged);
|
||||||
//
|
//
|
||||||
|
// displayEncodedHDRAlphaChk
|
||||||
|
//
|
||||||
|
this.displayEncodedHDRAlphaChk.AutoSize = true;
|
||||||
|
this.displayEncodedHDRAlphaChk.Location = new System.Drawing.Point(421, 117);
|
||||||
|
this.displayEncodedHDRAlphaChk.Name = "displayEncodedHDRAlphaChk";
|
||||||
|
this.displayEncodedHDRAlphaChk.Size = new System.Drawing.Size(163, 17);
|
||||||
|
this.displayEncodedHDRAlphaChk.TabIndex = 22;
|
||||||
|
this.displayEncodedHDRAlphaChk.Text = "Display Encoded HDR Alpha";
|
||||||
|
this.displayEncodedHDRAlphaChk.UseVisualStyleBackColor = true;
|
||||||
|
this.displayEncodedHDRAlphaChk.CheckedChanged += new System.EventHandler(this.displayEncodedHDRAlphaChk_CheckedChanged);
|
||||||
|
//
|
||||||
|
// gammaUD
|
||||||
|
//
|
||||||
|
this.gammaUD.DecimalPlaces = 5;
|
||||||
|
this.gammaUD.Increment = new decimal(new int[] {
|
||||||
|
5,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
196608});
|
||||||
|
this.gammaUD.Location = new System.Drawing.Point(421, 149);
|
||||||
|
this.gammaUD.Maximum = new decimal(new int[] {
|
||||||
|
1000000000,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0});
|
||||||
|
this.gammaUD.Minimum = new decimal(new int[] {
|
||||||
|
100000000,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
-2147483648});
|
||||||
|
this.gammaUD.Name = "gammaUD";
|
||||||
|
this.gammaUD.Size = new System.Drawing.Size(120, 20);
|
||||||
|
this.gammaUD.TabIndex = 23;
|
||||||
|
this.gammaUD.ValueChanged += new System.EventHandler(this.gammaUD_ValueChanged);
|
||||||
|
//
|
||||||
// CubeMapFaceViewer
|
// CubeMapFaceViewer
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
@ -198,6 +240,7 @@
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.pbBottomFace)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbBottomFace)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbBackFace)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbBackFace)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbRightFace)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pbRightFace)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.gammaUD)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -214,5 +257,7 @@
|
|||||||
private STButton btnLeftArray;
|
private STButton btnLeftArray;
|
||||||
private PictureBoxCustom pbRightFace;
|
private PictureBoxCustom pbRightFace;
|
||||||
private STCheckBox chkDisplayAlpha;
|
private STCheckBox chkDisplayAlpha;
|
||||||
|
private STCheckBox displayEncodedHDRAlphaChk;
|
||||||
|
private NumericUpDownFloat gammaUD;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -13,6 +13,8 @@ namespace Toolbox.Library.Forms
|
|||||||
public partial class CubeMapFaceViewer : STForm
|
public partial class CubeMapFaceViewer : STForm
|
||||||
{
|
{
|
||||||
private bool DisplayAlpha = true;
|
private bool DisplayAlpha = true;
|
||||||
|
private bool DisplayHDREncode = false;
|
||||||
|
private float Gamma = 2.2f;
|
||||||
|
|
||||||
public CubeMapFaceViewer()
|
public CubeMapFaceViewer()
|
||||||
{
|
{
|
||||||
@ -31,6 +33,8 @@ namespace Toolbox.Library.Forms
|
|||||||
pbTopFace.Paint += CreatePictureBoxText("Top");
|
pbTopFace.Paint += CreatePictureBoxText("Top");
|
||||||
pbBottomFace.Paint += CreatePictureBoxText("Bottom");
|
pbBottomFace.Paint += CreatePictureBoxText("Bottom");
|
||||||
chkDisplayAlpha.Checked = DisplayAlpha;
|
chkDisplayAlpha.Checked = DisplayAlpha;
|
||||||
|
displayEncodedHDRAlphaChk.Checked = DisplayHDREncode;
|
||||||
|
gammaUD.Value = (decimal)Gamma;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PaintEventHandler CreatePictureBoxText(string Text)
|
private PaintEventHandler CreatePictureBoxText(string Text)
|
||||||
@ -80,9 +84,14 @@ namespace Toolbox.Library.Forms
|
|||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
var CubeFaceBitmap = ActiveTexture.GetBitmap(i + (CurArrayDisplayLevel * 6));
|
var CubeFaceBitmap = ActiveTexture.GetBitmap(i + (CurArrayDisplayLevel * 6));
|
||||||
if (!DisplayAlpha)
|
if (DisplayHDREncode)
|
||||||
|
CubeFaceBitmap = BitmapExtension.EncodeHDRAlpha(CubeFaceBitmap, Gamma);
|
||||||
|
else if (!DisplayAlpha)
|
||||||
BitmapExtension.SetChannel(CubeFaceBitmap, ActiveTexture.RedChannel, ActiveTexture.GreenChannel, ActiveTexture.BlueChannel, STChannelType.One);
|
BitmapExtension.SetChannel(CubeFaceBitmap, ActiveTexture.RedChannel, ActiveTexture.GreenChannel, ActiveTexture.BlueChannel, STChannelType.One);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (i == FRONT_FACE)
|
if (i == FRONT_FACE)
|
||||||
pbFrontFace.Image = CubeFaceBitmap;
|
pbFrontFace.Image = CubeFaceBitmap;
|
||||||
else if (i == BACK_FACE)
|
else if (i == BACK_FACE)
|
||||||
@ -129,5 +138,16 @@ namespace Toolbox.Library.Forms
|
|||||||
|
|
||||||
UpdateArrayLevel();
|
UpdateArrayLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void displayEncodedHDRAlphaChk_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DisplayHDREncode = displayEncodedHDRAlphaChk.Checked;
|
||||||
|
UpdateArrayLevel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void gammaUD_ValueChanged(object sender, EventArgs e) {
|
||||||
|
Gamma = (float)gammaUD.Value;
|
||||||
|
UpdateArrayLevel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -522,6 +522,49 @@ namespace Toolbox.Library
|
|||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Bitmap EncodeHDRAlpha(Image image, float gamma = 2.2f)
|
||||||
|
{
|
||||||
|
var b = new Bitmap(image);
|
||||||
|
|
||||||
|
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
|
||||||
|
ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
|
||||||
|
int stride = bmData.Stride;
|
||||||
|
System.IntPtr Scan0 = bmData.Scan0;
|
||||||
|
|
||||||
|
unsafe
|
||||||
|
{
|
||||||
|
byte* p = (byte*)(void*)Scan0;
|
||||||
|
|
||||||
|
int nOffset = stride - b.Width * 4;
|
||||||
|
|
||||||
|
for (int y = 0; y < b.Height; ++y)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < b.Width; ++x)
|
||||||
|
{
|
||||||
|
float alpha = p[3] / 255f;
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
var col = (p[i] / 255f) * (float)Math.Pow(alpha, 4) * 1024;
|
||||||
|
col = col / (col + 1.0f);
|
||||||
|
col = (float)Math.Pow(col, 1.0f / gamma);
|
||||||
|
|
||||||
|
p[i] = (byte)(col * 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
p[3] = 255;
|
||||||
|
|
||||||
|
p += 4;
|
||||||
|
}
|
||||||
|
p += nOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b.UnlockBits(bmData);
|
||||||
|
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
public static bool Invert(Bitmap b)
|
public static bool Invert(Bitmap b)
|
||||||
{
|
{
|
||||||
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
|
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
|
||||||
|
Loading…
Reference in New Issue
Block a user