Imagen PNG a Lithophane C#

El formato PNG es popular ya que puede incluir gráficos transparentes. Mientras que litofanía es una obra de arte grabada o moldeada en un material muy delgado que se puede ver colocando la fuente de luz detrás de dicho modelo. Este artículo cubre cómo convertir una imagen PNG a litofanía en C#.

Convertidor de imagen PNG a litofanía: instalación de la API de C#

Aspose.3D para .NET La API se puede utilizar para trabajar con diferentes modelos y escenas 3D. Puede configurar fácilmente la API descargando sus archivos DLL de referencia desde la página Nuevas versiones o usando el siguiente comando de instalación NuGet:

PM> Install-Package Aspose.3D

Convertir imagen PNG a litofanía en C#

Puede convertir un archivo de imagen PNG a formato Lithophane siguiendo los pasos a continuación:

  • Cargue la imagen PNG de entrada.
  • Realice operaciones computacionales en objetos de malla.
  • Genere escenas en 3D y guarde objetos con el método Guardar.

El fragmento de código a continuación explica cómo convertir una imagen PNG a Lithophane mediante programación en C#:

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

// Crear algunos parámetros nuevos
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);

// Realizar operaciones computacionales en objetos de malla
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++;
    }
}

// Genera escena 3D y guarda objetos.
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// El método de muestra para llamar
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// Método ToGrayscale para llamar
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;
}

Obtenga una Licencia Temporal Gratis

Puede solicitar una licencia temporal gratuita para evaluar la API sin ninguna limitación.

Demostración en línea

Pruebe la aplicación web PNG Image to Lithophane Converter desarrollada con esta API.

Conclusión

En este artículo, ha explorado la conversión de imágenes PNG a litofanía. Además, puede consultar el espacio documentación para conocer otras características de la API. En caso de que tenga alguna pregunta o consulta, escríbanos al foro.

Ver también

Convertir archivo USDZ a GLB o GLTF en C#