JPG-bild till Lithophane C#

JPG bilder används ofta för att spara bilder, ritningar och annan visuell information. Medan litofan representerar tredimensionell bild som ändrar egenskaper beroende på ljuskällan bakom den. Den här artikeln tar upp hur man konverterar en JPG-bild till litofan i C#.

JPG Image to Lithophane Converter – C# API Installation

Aspose.3D for .NET API kan användas för att manipulera olika tredimensionella modeller. Konfigurera helt enkelt API:et genom att ladda ner DLL-filerna från avsnittet Nedladdningar eller med följande installationskommando NuGet:

PM> Install-Package Aspose.3D

Konvertera JPG-bild till Lithophane i C#

Du kan konvertera en JPG-bild till Lithophane med följande steg:

  • Ladda in JPG-bilden.
  • Utför beräkningsoperationer på Mesh-objekt.
  • Skapa 3d-scen och spara objekt med metoden Spara.

Följande exempelkod visar hur man konverterar en JPG-bild till Lithophane programmatiskt i C#:

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

// Skapa några nya parametrar
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);

// Utför beräkningsoperationer på Mesh-objekt
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++;
    }
}

// Skapa 3D-scen och spara objekt
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// Exempelmetoden att anropa
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// ToGrayscale metod att anropa
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;
}

Få gratis tillfällig licens

Du kan utvärdera API:et i dess fulla kapacitet genom att begära en gratis temporär licens.

Online demo

Prova webbappen JPG Image to Lithophane Converter som utvecklats med detta API.

Slutsats

I den här artikeln har du utforskat konverteringen av JPG-bild till litofan. Du kan använda litofanen för att skapa en 3D-modell, den använder tjocklek för att reflektera mörkret i bilden och du kan se bilden när du sätter en ljuskälla bakom den utskrivna modellen. Dessutom kan du besöka avsnittet dokumentation för att kolla in andra funktioner som erbjuds av API:et. Om du märker någon tvetydighet, vänligen kontakta oss på forumet.

Se även

Konvertera USDZ till HTML i C#