PNG-Bild in Lithophanie C#

Das Format PNG ist beliebt, da es transparente Grafiken enthalten kann. Dagegen ist Lithophan ein geätztes oder geformtes Kunstwerk aus sehr dünnem Material, das Sie sehen können, wenn Sie die Lichtquelle hinter einem solchen Modell platzieren. In diesem Artikel wird beschrieben, wie Sie ein PNG-Bild in C# in Lithophan konvertieren.

PNG-Bild-zu-Lithophane-Konverter – C#-API-Installation

Aspose.3D for .NET API kann verwendet werden, um mit verschiedenen 3D-Modellen und Szenen zu arbeiten. Sie können die API einfach konfigurieren, indem Sie ihre Referenz-DLL-Dateien von der Seite New Releases herunterladen oder den folgenden NuGet-Installationsbefehl verwenden:

PM> Install-Package Aspose.3D

Konvertieren Sie PNG-Bilder in Lithophane in C#

Sie können eine PNG-Bilddatei in das Lithophane-Format konvertieren, indem Sie die folgenden Schritte ausführen:

  • Laden Sie das PNG-Eingabebild.
  • Führen Sie Rechenoperationen an Mesh-Objekten durch.
  • Generieren Sie eine 3D-Szene und speichern Sie Objekte mit der Methode Save.

Das folgende Code-Snippet erklärt, wie ein PNG-Bild programmgesteuert in C# in Lithophane konvertiert wird:

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

// Erstellen Sie einige neue Parameter
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);

// Führen Sie Rechenoperationen an Mesh-Objekten durch
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++;
    }
}

// Generieren Sie eine 3D-Szene und speichern Sie Objekte
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// Die aufzurufende Beispielmethode
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// ToGrayscale-Methode zum Aufrufen
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;
}

Holen Sie sich eine kostenlose temporäre Lizenz

Sie können eine kostenlose temporäre Lizenz anfordern, um die API ohne Einschränkungen zu testen.

Online-Demo

Probieren Sie die mit dieser API entwickelte Web-App PNG Image to Lithophane Converter aus.

Fazit

In diesem Artikel haben Sie die Konvertierung von PNG-Bildern in Lithophan untersucht. Darüber hinaus können Sie sich den Bereich Dokumentation ansehen, um weitere Funktionen der API kennenzulernen. Falls Sie Fragen oder Anregungen haben, schreiben Sie uns bitte an das Forum.

Siehe auch

USDZ in GLB- oder GLTF-Datei in C# konvertieren