JPG 图像到 Lithophane C#

JPG 图像被广泛用于保存图片、绘图和其他视觉信息。然而,lithophane 代表三维图像,其特征取决于其背后的光源。本文介绍如何在 C# 中将 JPG 图像转换为 lithophane。

JPG 图像到 Lithophane 转换器 – C# API 安装

Aspose.3D for .NET API 可用于操作不同的三维模型。只需通过从 Downloads 部分下载 DLL 文件或使用以下 NuGet 安装命令来配置 API:

PM> Install-Package Aspose.3D

在 C# 中将 JPG 图像转换为 Lithophane

您可以通过以下步骤将 JPG 图像转换为 Lithophane:

  • 加载输入的 JPG 图像。
  • 对 Mesh 对象执行计算操作。
  • 使用 Save 方法生成 3d 场景并保存对象。

以下示例代码演示了如何在 C# 中以编程方式将 JPG 图像转换为 Lithophane:

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

// 创建一些新参数
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);

// 对 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++;
    }
}

// 生成 3d 场景并保存对象
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// 调用的示例方法
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// ToGrayscale 方法调用
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;
}

获得免费临时许可证

您可以通过申请 免费临时许可证 来评估 API 的全部功能。

在线演示

请尝试使用此 API 开发的 JPG Image to Lithophane Converter 网络应用程序。

结论

在本文中,您探索了 JPG Image 到 lithophane 的转换。您可以使用石版纸创建 3D 模型,它使用厚度来反映图像的黑暗,当您将光源放在打印模型后面时,您可以看到图像。此外,您可以访问 documentation 部分以查看 API 提供的其他功能。如果您发现任何歧义,请通过 论坛 与我们联系。

也可以看看

在 C# 中将 USDZ 转换为 HTML