JPG-Bild zu Lithophane C#

JPG-Bilder werden häufig zum Speichern von Bildern, Zeichnungen und anderen visuellen Informationen verwendet. Wohingegen Lithophane ein dreidimensionales Bild darstellt, das seine Eigenschaften abhängig von der dahinter liegenden Lichtquelle ändert. In diesem Artikel wird beschrieben, wie Sie ein JPG-Bild in C# in Lithophan konvertieren.

JPG-Bild in Lithophane-Konverter – C#-API-Installation

Aspose.3D for .NET API kann verwendet werden, um verschiedene dreidimensionale Modelle zu manipulieren. Konfigurieren Sie einfach die API, indem Sie die DLL-Dateien aus dem Abschnitt Downloads herunterladen oder mit dem folgenden NuGet-Installationsbefehl:

PM> Install-Package Aspose.3D

Konvertieren Sie JPG-Bilder in Lithophane in C#

Sie können ein JPG-Bild mit den folgenden Schritten in Lithophane umwandeln:

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

Der folgende Beispielcode zeigt, wie ein JPG-Bild programmgesteuert in C# in Lithophane konvertiert wird:

string file = "template.jpg";
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 die API in vollem Umfang testen, indem Sie eine kostenlose temporäre Lizenz anfordern.

Online-Demo

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

Fazit

In diesem Artikel haben Sie die Konvertierung von JPG-Bildern in Lithophan untersucht. Sie können die Lithophanie verwenden, um ein 3D-Modell zu erstellen, sie verwendet die Dicke, um die Dunkelheit des Bildes zu reflektieren, und Sie können das Bild sehen, wenn Sie eine Lichtquelle hinter das gedruckte Modell stellen. Darüber hinaus können Sie den Abschnitt Dokumentation besuchen, um sich über andere Funktionen der API zu informieren. Falls Sie Unklarheiten bemerken, wenden Sie sich bitte an uns im Forum.

Siehe auch

USDZ in HTML in C# konvertieren