Hình ảnh PNG sang Lithophane C#

Định dạng PNG phổ biến vì chúng có thể bao gồm đồ họa trong suốt. Trong khi đó, lithophane là một tác phẩm nghệ thuật được khắc hoặc đúc bằng vật liệu rất mỏng mà bạn có thể nhìn thấy bằng cách đặt nguồn sáng phía sau mô hình đó. Bài viết này trình bày cách chuyển đổi hình ảnh PNG sang lithophane trong C#.

Chuyển đổi hình ảnh sang Lithophane - Cài đặt API C#

API Aspose.3D for .NET có thể được sử dụng để làm việc với các mô hình và cảnh 3D khác nhau. Bạn có thể dễ dàng định cấu hình API bằng cách tải xuống tệp DLL tham chiếu của nó từ trang Bản phát hành mới hoặc sử dụng lệnh cài đặt NuGet sau:

PM> Install-Package Aspose.3D

Chuyển đổi hình ảnh PNG sang Lithophane trong C#

Bạn có thể chuyển đổi tệp Hình ảnh PNG sang định dạng Lithophane bằng cách làm theo các bước dưới đây:

  • Tải hình ảnh PNG đầu vào.
  • Thực hiện các thao tác tính toán trên các đối tượng Mesh.
  • Tạo cảnh 3D và lưu các đối tượng bằng phương thức Lưu.

Đoạn mã bên dưới giải thích cách chuyển đổi Hình ảnh PNG sang Lithophane theo chương trình trong C#:

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

// Tạo một số thông số mới
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);

// Thực hiện các hoạt động tính toán trên các đối tượng 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++;
    }
}

// Tạo cảnh 3D và lưu các đối tượng
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// Phương thức mẫu để gọi
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// Phương thức ToGrayscale để gọi
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;
}

Nhận Giấy phép Tạm thời Miễn phí

Bạn có thể yêu cầu giấy phép tạm thời miễn phí để đánh giá API mà không có bất kỳ giới hạn nào.

Demo trực tuyến

Vui lòng dùng thử ứng dụng web PNG Image to Lithophane Converter được phát triển bằng API này.

Sự kết luận

Trong bài viết này, bạn đã tìm hiểu về việc chuyển đổi PNG Image sang lithophane. Hơn nữa, bạn có thể xem qua không gian tài liệu để tìm hiểu các tính năng khác của API. Trong trường hợp bạn có bất kỳ câu hỏi hoặc thắc mắc nào, vui lòng viết thư cho chúng tôi tại diễn đàn.

Xem thêm

Chuyển đổi USDZ sang tệp GLB hoặc GLTF trong C#