Obrázek PNG do Lithophane C#

Formát PNG je oblíbený, protože může obsahovat průhlednou grafiku. Zatímco lithophane je leptané nebo lisované umělecké dílo ve velmi tenkém materiálu, které můžete vidět umístěním zdroje světla za takový model. Tento článek popisuje, jak převést obrázek PNG na litophane v C#.

PNG Image to Lithophane Converter – instalace C# API

Aspose.3D for .NET API lze použít pro práci s různými 3D modely a scénami. Rozhraní API můžete snadno nakonfigurovat stažením jeho referenčních souborů DLL ze stránky New Releases nebo pomocí následujícího instalačního příkazu NuGet:

PM> Install-Package Aspose.3D

Převést obrázek PNG na Lithophane v C#

Soubor obrázku PNG můžete převést do formátu Lithophane podle následujících kroků:

  • Načtěte vstupní obrázek PNG.
  • Provádějte výpočetní operace na Mesh objektech.
  • Vygenerujte 3D scénu a uložte objekty pomocí metody Save.

Níže uvedený fragment kódu vysvětluje, jak převést obrázek PNG na Lithophane programově v C#:

string file = "template.png";
string output = "file.fbx";

// Vytvořte nějaké nové parametry
Aspose.ThreeD.Render.TextureData td = Aspose.ThreeD.Render.TextureData.FromFile(file);
const float nozzleSize = 0.9f;
const float layerHeight = 0.2f;
var grayscale = ToGrayscale(td);
const float width = 120.0f;
float height = width / td.Width * td.Height;
float thickness = 10.0f;
float layers = thickness / layerHeight;
int widthSegs = (int)Math.Floor(width / nozzleSize);
int heightSegs = (int)Math.Floor(height / nozzleSize);

// Provádějte výpočetní operace s objekty Mesh
Aspose.ThreeD.Entities.Mesh mesh = new Aspose.ThreeD.Entities.Mesh();
for (int y = 0; y < heightSegs; y++)
{
    float dy = (float)y / heightSegs;
   for (int x = 0; x < widthSegs; x++)
    {
        float dx = (float)x / widthSegs;
        float gray = Sample(grayscale, td.Width, td.Height, dx, dy);
        float v = (1 - gray) * thickness;
        mesh.ControlPoints.Add(new Aspose.ThreeD.Utilities.Vector4(dx * width, dy * height, v));
    }
}

for (int y = 0; y < heightSegs - 1; y++)
{
    int row = (y * heightSegs);
    int ptr = row;
   for (int x = 0; x < widthSegs - 1; x++)
    {
        mesh.CreatePolygon(ptr, ptr + widthSegs, ptr + 1);
        mesh.CreatePolygon(ptr + 1, ptr + widthSegs, ptr + widthSegs + 1);
        ptr++;
    }
}

// Vytvářejte 3D scénu a ukládejte objekty
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// Ukázková metoda k volání
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// Volání metody ToGrayscale
static float[,] ToGrayscale(Aspose.ThreeD.Render.TextureData td)
{
    var ret = new float[td.Width, td.Height];
    var stride = td.Stride;
    var data = td.Data;
    var bytesPerPixel = td.BytesPerPixel;
   for (int y = 0; y < td.Height; y++)
    {
        int ptr = y * stride;
       for (int x = 0; x < td.Width; x++)
        {
            var v = (data[ptr] * 0.21f + data[ptr + 1] * 0.72f + data[ptr + 2] * 0.07f) / 255.0f;
            ret[x, y] = v;
            ptr += bytesPerPixel;
        }
    }
    return ret;
}

Získejte bezplatnou dočasnou licenci

Můžete požádat o bezplatnou dočasnou licenci k vyhodnocení API bez jakýchkoli omezení.

Online demo

Vyzkoušejte prosím webovou aplikaci PNG Image to Lithophane Converter vyvinutou pomocí tohoto rozhraní API.

Závěr

V tomto článku jste prozkoumali převod obrázku PNG na litophane. Kromě toho se můžete podívat do prostoru dokumentace, kde se dozvíte další funkce API. V případě jakýchkoli dotazů nebo dotazů nám napište na fórum.

Viz také

Převést USDZ na GLB nebo GLTF soubor v C#