Compare commits
2 Commits
7c484a9af3
...
1bdead0750
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1bdead0750 | ||
|
|
8173327c79 |
@@ -28,16 +28,16 @@ public static class ImageUtil {
|
|||||||
for (int x = 0; x < width; x++) {
|
for (int x = 0; x < width; x++) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case float[,] f:
|
case float[,] f:
|
||||||
f[x, y] = span[x].R / max;
|
f[x, y] = span[x].R / max * (span[x].A / max);
|
||||||
break;
|
break;
|
||||||
case Vector2[,] f:
|
case Vector2[,] f:
|
||||||
f[x, y] = new(span[x].R / max, span[x].G / max);
|
f[x, y] = new Vector2(span[x].R / max, span[x].G / max) * new Vector2(span[x].A / max);
|
||||||
break;
|
break;
|
||||||
case Vector3[,] f:
|
case Vector3[,] f:
|
||||||
f[x, y] = new(span[x].R / max, span[x].G / max, span[x].B / max);
|
f[x, y] = new Vector3(span[x].R / max, span[x].G / max, span[x].B / max) * new Vector3(span[x].A / max);
|
||||||
break;
|
break;
|
||||||
case Vector4[,] f:
|
case Vector4[,] f:
|
||||||
f[x, y] = new(span[x].R / max, span[x].G / max, span[x].B / max, span[x].A / max);
|
f[x, y] = new Vector4(span[x].R / max, span[x].G / max, span[x].B / max, span[x].A / max);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -88,16 +88,16 @@ public static class ImageUtil {
|
|||||||
for (int x = 0; x < width; x++) {
|
for (int x = 0; x < width; x++) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case float[,] f:
|
case float[,] f:
|
||||||
f[x, y] = span[x].R / max;
|
f[x, y] = span[x].R / max * (span[x].A / max);
|
||||||
break;
|
break;
|
||||||
case Vector2[,] f:
|
case Vector2[,] f:
|
||||||
f[x, y] = new(span[x].R / max, span[x].G / max);
|
f[x, y] = new Vector2(span[x].R / max, span[x].G / max) * new Vector2(span[x].A / max);
|
||||||
break;
|
break;
|
||||||
case Vector3[,] f:
|
case Vector3[,] f:
|
||||||
f[x, y] = new(span[x].R / max, span[x].G / max, span[x].B / max);
|
f[x, y] = new Vector3(span[x].R / max, span[x].G / max, span[x].B / max) * new Vector3(span[x].A / max);
|
||||||
break;
|
break;
|
||||||
case Vector4[,] f:
|
case Vector4[,] f:
|
||||||
f[x, y] = new(span[x].R / max, span[x].G / max, span[x].B / max, span[x].A / max);
|
f[x, y] = new Vector4(span[x].R / max, span[x].G / max, span[x].B / max, span[x].A / max);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,21 @@ public class Program {
|
|||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i < Images.Count; i++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < Images[i].Width; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < Images[i].Height; y++)
|
||||||
|
{
|
||||||
|
Images[i].Pixels[x, y].X = MathF.Min(Images[i - 1].Pixels[x, y].X + Images[i].Pixels[x, y].X, MAX);
|
||||||
|
Images[i].Pixels[x, y].Y = MathF.Min(Images[i - 1].Pixels[x, y].Y + Images[i].Pixels[x, y].X, MAX);
|
||||||
|
Images[i].Pixels[x, y].Z = MathF.Min(Images[i - 1].Pixels[x, y].Z + Images[i].Pixels[x, y].X, MAX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Images[i].Pixels.SaveImage($"./Sum{i}.png");
|
||||||
|
}
|
||||||
|
|
||||||
Console.WriteLine("Creating masks...");
|
Console.WriteLine("Creating masks...");
|
||||||
//for each image pair, create a mask
|
//for each image pair, create a mask
|
||||||
var width = (uint)Images[0].Width;
|
var width = (uint)Images[0].Width;
|
||||||
@@ -89,14 +104,20 @@ public class Program {
|
|||||||
var finalImage = new Vector3[width, height];
|
var finalImage = new Vector3[width, height];
|
||||||
var currStep = 0f;
|
var currStep = 0f;
|
||||||
var stepIncrement = MAX / (Gradients.Count);
|
var stepIncrement = MAX / (Gradients.Count);
|
||||||
|
|
||||||
|
for(int x=0; x<width; x++)
|
||||||
|
for (int y = 0; y < height; y++)
|
||||||
|
finalImage[x, y] = new Vector3(Images[0].Pixels[x, y].X);
|
||||||
|
|
||||||
for (var i = 0; i < Gradients.Count; i++) {
|
for (var i = 0; i < Gradients.Count; i++) {
|
||||||
var mask = ImageMasks[i + 1];
|
var mask = ImageMasks[i + 1];
|
||||||
var gradient = Gradients[i];
|
var gradient = Gradients[i];
|
||||||
Console.WriteLine($"Applying gradient {i}..., {currStep} -> {currStep + stepIncrement}");
|
Console.WriteLine($"Applying gradient {i}..., {currStep} -> {currStep + stepIncrement}");
|
||||||
for (var x = 0; x < mask.Mask.GetLength(0); x++) {
|
for (var x = 0; x < mask.Mask.GetLength(0); x++) {
|
||||||
for (var y = 0; y < mask.Mask.GetLength(1); y++) {
|
for (var y = 0; y < mask.Mask.GetLength(1); y++) {
|
||||||
if (mask.Mask[x, y].X == 0) continue;
|
if(gradient[x, y].X == 0) continue;
|
||||||
finalImage[x, y] = new(Remap(gradient[x, y].X, MAX, MIN, currStep, currStep + stepIncrement));
|
var pixel = new Vector3(Remap(gradient[x, y].X, MIN, MAX, 1.0f-currStep, 1.0f-(currStep + stepIncrement)));
|
||||||
|
if(pixel.X > finalImage[x, y].X) finalImage[x, y] = pixel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
currStep += stepIncrement;
|
currStep += stepIncrement;
|
||||||
@@ -251,7 +272,7 @@ public class Program {
|
|||||||
uint y = (uint)(i / resX);
|
uint y = (uint)(i / resX);
|
||||||
var pixelA = A[x, y];
|
var pixelA = A[x, y];
|
||||||
float lumaA = (pixelA.X + pixelA.Y + pixelA.Z) / 3;
|
float lumaA = (pixelA.X + pixelA.Y + pixelA.Z) / 3;
|
||||||
float resultPixel = lumaA > 0 ? MAX : MIN;
|
float resultPixel = lumaA > 0.99 ? MAX : MIN;
|
||||||
temp[x, y] = new(resultPixel, 0, 0);
|
temp[x, y] = new(resultPixel, 0, 0);
|
||||||
});
|
});
|
||||||
return temp;
|
return temp;
|
||||||
|
|||||||
Reference in New Issue
Block a user