Image JPG en Lithophane C#

Les images JPG sont largement utilisées pour enregistrer des images, des dessins et d’autres informations visuelles. Considérant que, lithophane représente une image tridimensionnelle qui change de caractéristiques en fonction de la source de lumière derrière elle. Cet article explique comment convertir une image JPG en lithophane en C#.

Convertisseur d’image JPG en lithophane - Installation de l’API C#

L’API Aspose.3D pour .NET peut être utilisée pour manipuler différents modèles tridimensionnels. Configurez simplement l’API en téléchargeant les fichiers DLL depuis la section Téléchargements ou avec la commande d’installation NuGet suivante :

PM> Install-Package Aspose.3D

Convertir une image JPG en Lithophane en C#

Vous pouvez convertir une image JPG en Lithophane en procédant comme suit :

  • Chargez l’image JPG d’entrée.
  • Effectuez des opérations de calcul sur des objets Mesh.
  • Générez une scène 3D et enregistrez des objets à l’aide de la méthode Save.

L’exemple de code suivant montre comment convertir une image JPG en Lithophane par programmation en C# :

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

// Créer de nouveaux paramètres
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);

// Effectuer des opérations de calcul sur des objets 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++;
    }
}

// Générer une scène 3D et enregistrer des objets
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// L'exemple de méthode à appeler
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// Méthode ToGrayscale à appeler
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;
}

Obtenez une licence temporaire gratuite

Vous pouvez évaluer l’API dans toute sa capacité en demandant une licence temporaire gratuite.

Démo en ligne

Veuillez essayer l’application Web JPG Image to Lithophane Converter développée à l’aide de cette API.

Conclusion

Dans cet article, vous avez exploré la conversion d’une image JPG en lithophane. Vous pouvez utiliser le lithophane pour créer un modèle 3D, il utilise l’épaisseur pour refléter l’obscurité de l’image et vous pouvez voir l’image lorsque vous placez une source de lumière derrière le modèle imprimé. De plus, vous pouvez visiter la section documentation pour découvrir d’autres fonctionnalités offertes par l’API. Si vous remarquez une ambiguïté, veuillez nous contacter sur le forum.

Voir également

Convertir USDZ en HTML en C#