Изображение PNG в литофан C#

Формат PNG популярен, так как может включать прозрачную графику. Принимая во внимание, что литофан представляет собой выгравированное или отлитое произведение искусства из очень тонкого материала, которое вы можете увидеть, поместив источник света за такую модель. В этой статье рассказывается, как преобразовать изображение PNG в lithophane на C#.

Конвертер изображений PNG в литофаны — установка C# API

Aspose.3D for .NET API можно использовать для работы с различными 3D-моделями и сценами. Вы можете легко настроить API, загрузив его эталонные DLL-файлы со страницы Новые версии или используя следующую команду установки NuGet:

PM> Install-Package Aspose.3D

Преобразование PNG-изображения в литофана на C#

Вы можете преобразовать файл изображения PNG в формат Lithophane, выполнив следующие действия:

  • Загрузите исходное изображение PNG.
  • Выполнение вычислительных операций над объектами Mesh.
  • Создайте 3D-сцену и сохраните объекты с помощью метода Save.

Фрагмент кода ниже объясняет, как программно преобразовать PNG-изображение в Lithophane на C#:

string file = "template.png";
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 без каких-либо ограничений.

Онлайн-демонстрация

Попробуйте веб-приложение Конвертер изображений PNG в литофана, разработанное с использованием этого API.

Вывод

В этой статье вы изучили преобразование изображения PNG в литофан. Кроме того, вы можете заглянуть в раздел документация, чтобы узнать о других функциях API. Если у вас есть какие-либо вопросы или вопросы, пожалуйста, напишите нам на форум.

Смотрите также

Преобразовать файл USDZ в файл GLB или GLTF на C#