Obraz PNG do Lithophane C#

Format PNG jest popularny, ponieważ może zawierać przezroczystą grafikę. Natomiast lithophane to wytrawiona lub odlewana grafika z bardzo cienkiego materiału, którą można zobaczyć, umieszczając źródło światła za takim modelem. W tym artykule opisano, jak przekonwertować obraz PNG na litofan w języku C#.

Konwerter obrazu PNG na litofan – instalacja API C#

Aspose.3D for .NET API może być używane do pracy z różnymi modelami i scenami 3D. Możesz łatwo skonfigurować interfejs API, pobierając jego referencyjne pliki DLL ze strony Nowe wydania lub używając następującego polecenia instalacyjnego NuGet:

PM> Install-Package Aspose.3D

Konwertuj obraz PNG na litofan w C#

Możesz przekonwertować plik obrazu PNG na format Lithophane, wykonując poniższe czynności:

  • Załaduj wejściowy obraz PNG.
  • Wykonywanie operacji obliczeniowych na obiektach siatki.
  • Wygeneruj scenę 3d i zapisz obiekty metodą Save.

Poniższy fragment kodu wyjaśnia, jak programowo przekonwertować obraz PNG na litofan w języku C#:

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

// Utwórz nowe parametry
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);

// Wykonywanie operacji obliczeniowych na obiektach siatki
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++;
    }
}

// Wygeneruj scenę 3D i zapisz obiekty
Aspose.ThreeD.Scene scene = new Aspose.ThreeD.Scene(mesh);
scene.Save(output, Aspose.ThreeD.FileFormat.FBX7400ASCII);

// Przykładowa metoda do wywołania
static float Sample(float[,] data, int w, int h, float x, float y)
{
    return data[(int)(x * w), (int)(y * h)];
}

// Metoda ToGrayscale do wywołania
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;
}

Uzyskaj bezpłatną tymczasową licencję

Możesz poprosić o bezpłatną licencję tymczasową, aby ocenić interfejs API bez żadnych ograniczeń.

Wersja demonstracyjna online

Wypróbuj aplikację internetową PNG Image to Lithophane Converter opracowaną przy użyciu tego interfejsu API.

Wniosek

W tym artykule zbadałeś konwersję obrazu PNG na litofan. Ponadto możesz zajrzeć do przestrzeni documentation, aby poznać inne funkcje API. Jeśli masz jakieś pytania lub wątpliwości, napisz do nas na forum.

Zobacz też

Konwertuj USDZ na plik GLB lub GLTF w C#