Image PNG en Lithophane C#

Le format PNG est populaire car il peut inclure des graphiques transparents. Alors que lithophane est une œuvre d’art gravée ou moulée dans un matériau très fin que vous pouvez voir en plaçant la source de lumière derrière un tel modèle. Cet article explique comment convertir une image PNG en lithophane en C#.

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

L’API Aspose.3D pour .NET peut être utilisée pour travailler avec différents modèles et scènes 3D. Vous pouvez facilement configurer l’API en téléchargeant ses fichiers DLL de référence depuis la page New Releases ou en utilisant la commande d’installation NuGet suivante :

PM> Install-Package Aspose.3D

Convertir une image PNG en Lithophane en C#

Vous pouvez convertir un fichier image PNG au format Lithophane en suivant les étapes ci-dessous :

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

L’extrait de code ci-dessous explique comment convertir une image PNG en Lithophane par programmation en C# :

string file = "template.png";
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 demander une licence temporaire gratuite pour évaluer l’API sans aucune limitation.

Démo en ligne

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

Conclusion

Dans cet article, vous avez exploré la conversion d’une image PNG en lithophane. De plus, vous pouvez consulter l’espace documentation pour découvrir d’autres fonctionnalités de l’API. Si vous avez des questions ou des requêtes, veuillez nous écrire sur le forum.

Voir également

Convertir USDZ en fichier GLB ou GLTF en C#