PNG Görüntüsünü Lithophane'ye C#

PNG biçimi, şeffaf grafikler içerebildikleri için popülerdir. Litofan ise, ışık kaynağını bu tür bir modelin arkasına koyarak görebileceğiniz çok ince bir malzemeden oyulmuş veya kalıplanmış bir sanat eseridir. Bu makale, bir PNG görüntüsünün C# dilinde litofana nasıl dönüştürüleceğini kapsar.

PNG Görüntüsünden Lithophane Converter – C# API Kurulumu

Aspose.3D for .NET API, farklı 3B modeller ve sahnelerle çalışmak için kullanılabilir. Yeni Sürümler sayfasından referans DLL dosyalarını indirerek veya aşağıdaki NuGet kurulum komutunu kullanarak API’yi kolayca yapılandırabilirsiniz:

PM> Install-Package Aspose.3D

PNG Görüntüsünü C# ile Lithophane’a Dönüştür

Aşağıdaki adımları izleyerek bir PNG Görüntü dosyasını Lithophane formatına dönüştürebilirsiniz:

  • Giriş PNG görüntüsünü yükleyin.
  • Mesh nesneleri üzerinde hesaplama işlemleri gerçekleştirin.
  • Kaydet yöntemiyle 3B sahne oluşturun ve nesneleri kaydedin.

Aşağıdaki kod parçacığı, bir PNG Görüntüsünün C# dilinde programlı olarak Lithophane’e nasıl dönüştürüleceğini açıklar:

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

// Bazı yeni parametreler oluşturun
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 nesnelerinde hesaplama işlemleri gerçekleştirin
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++;
    }
}

// 3B sahne oluşturun ve nesneleri kaydedin
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// Çağrılacak örnek yöntem
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// Çağrılacak ToGrayscale yöntemi
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;
}

Ücretsiz Geçici Lisans Alın

API’yi herhangi bir sınırlama olmaksızın değerlendirmek için bir ücretsiz geçici lisans talep edebilirsiniz.

Çevrimiçi Demo

Lütfen bu API kullanılarak geliştirilen PNG Image to Lithophane Converter web uygulamasını deneyin.

Çözüm

Bu makalede, PNG Görüntüsünün litofana dönüştürülmesini incelediniz. Ayrıca API’nin diğer özelliklerini öğrenmek için documentation alanına göz atabilirsiniz. Herhangi bir sorunuz veya sorunuz varsa, lütfen forumdan bize yazın.

Ayrıca bakınız

C# dilinde USDZ’yi GLB veya GLTF Dosyasına Dönüştürün