Imagen JPG a Lithophane C#

Las imágenes JPG se utilizan ampliamente para guardar imágenes, dibujos y otra información visual. Mientras que litofanía representa una imagen tridimensional que cambia de características dependiendo de la fuente de luz detrás de ella. Este artículo cubre cómo convertir una imagen JPG a litofanía en C#.

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

Aspose.3D para .NET La API se puede utilizar para manipular diferentes modelos tridimensionales. Simplemente configure la API descargando los archivos DLL desde la sección Descargas o con el siguiente comando de instalación NuGet:

PM> Install-Package Aspose.3D

Convertir imagen JPG a Lithophane en C#

Puede convertir una imagen JPG a Lithophane con los siguientes pasos:

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

El siguiente código de ejemplo demuestra cómo convertir una imagen JPG a Lithophane mediante programación en C#:

string file = "template.jpg";
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 evaluar la API en toda su capacidad solicitando una licencia temporal gratuita.

Demostración en línea

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

Conclusión

En este artículo, ha explorado la conversión de imágenes JPG a litofanía. Puede usar el litofano para crear un modelo 3D, usa grosor para reflejar la oscuridad de la imagen y puede ver la imagen cuando coloca una fuente de luz detrás del modelo impreso. Además, puede visitar la sección documentación para ver otras funciones que ofrece la API. En caso de que observe alguna ambigüedad, comuníquese con nosotros en el foro.

Ver también

Convertir USDZ a HTML en C#