Menggambar Gambar Raster dan Vektor

Baik Anda membuat situs web, aplikasi desktop, atau aplikasi seluler, kemampuan memanipulasi dan menggambar gambar merupakan aspek penting saat memproses dan mengedit gambar. Untuk memberdayakan pengembang dengan fitur menggambar yang canggih namun mudah diimplementasikan, kami memperkenalkan Aspose.Imaging.Drawing, API canggih yang dirancang untuk aplikasi C# .NET, yang menawarkan berbagai fitur menggambar gambar.

Perpustakaan Gambar C# .NET

Aspose.Imaging.Drawing adalah API tangguh yang memungkinkan Anda memproses gambar raster dan vektor dengan teknik pemrosesan gambar tingkat lanjut. Dengan akses byte asli, API memastikan kecepatan pemrosesan yang tinggi saat membuat atau memanipulasi gambar. Dengan menggunakan API, Anda dapat menggambar objek dengan manipulasi piksel dan jalur grafik serta mengonversi gambar dari satu format ke format lainnya. Aspose.Imaging.Drawing menggunakan Aspose.Drawing sebagai mesin grafis default, yang merupakan pustaka grafis 2D lintas platform yang menawarkan serangkaian fitur lengkap untuk menggambar teks, geometri, dan gambar tanpa ketergantungan eksternal apa pun.

Anda dapat mengunduh dan menginstal Aspose.Imaging.Drawing dari NuGet.

PM> NuGet\Install-Package Aspose.Imaging.Drawing

Sekarang mari kita lihat beberapa fitur penting dari .NET Drawing API ini dan penggunaannya dengan bantuan kode sumber.

Membuat Grafik menggunakan .NET Drawing Library

Aspose.Imaging.Drawing memungkinkan Anda membuat gambar dengan menggambar objek berbeda seperti lingkaran, garis, segitiga, kotak, dan elips. Tidak hanya gambar raster tetapi Anda dapat menghasilkan gambar vektor menggunakan API. Mari kita lihat cara menggambar gambar raster dan vektor di C# menggunakan API gambar .NET ini.

Menggambar Gambar Raster

Berikut langkah-langkah menggambar gambar raster menggunakan Aspose.Imaging.Drawing API.

  • Pertama, buat gambar dengan format yang diinginkan menggunakan metode Image.Create().
  • Kemudian buat objek kelas Graphics dan inisialisasi dengan Gambar yang telah kita buat di atas.
  • Bersihkan permukaan gambar menggunakan metode Graphics.Clear.
  • Buat Pena baru dan inisialisasi dengan warna yang diinginkan.
  • Gambarlah elips (atau objek grafis lainnya) menggunakan metode Graphics.DrawEllipse().
  • Gambarlah poligon menggunakan metode Graphics.FillPolygon().
  • Terakhir, simpan gambar menggunakan metode Image.Save().

Cuplikan kode berikut menunjukkan cara menggambar gambar di C#.

string outputFolder = @"Output\";

// Buat sebuah instance dari BmpOptions dan atur berbagai propertinya
BmpOptions imageOptions = new BmpOptions();
imageOptions.BitsPerPixel = 24;

// Buat instance FileCreateSource dan tetapkan ke properti Source 
imageOptions.Source = new FileCreateSource(outputFolder + "result.bmp", false);

using (var image = Image.Create(imageOptions, 500, 500))
{
    var graphics = new Graphics(image);

    // Hapus permukaan gambar dengan warna putih dan Buat serta inisialisasi objek Pena dengan warna biru
    graphics.Clear(Color.White);
    var pen = new Pen(Color.Blue);

    // Gambarlah Ellipse dengan menentukan persegi panjang pembatas dengan lebar 150 dan tinggi 100 juga Gambarlah poligon menggunakan LinearGradientBrush
    graphics.DrawEllipse(pen, new Rectangle(10, 10, 150, 100));

    using (var linearGradientBrush = new LinearGradientBrush(image.Bounds, Color.Red, Color.White, 45f))
    {
        graphics.FillPolygon(linearGradientBrush, new[] { new Point(200, 200), new Point(400, 200), new Point(250, 350) });
    }

    // Menyimpan gambar
    image.Save();
}

Menggambar Gambar Vektor

Mirip dengan gambar raster, Anda dapat menggambar grafik vektor, seperti SVG, dalam beberapa langkah sederhana. Mari membuat gambar vektor menggunakan perpustakaan gambar C# kita.

  • Pertama, buat objek MemoryStream.
  • Kemudian, muat gambar SVG.
  • Rasterisasi SVG ke PNG dan tulis hasilnya ke aliran.
  • Muat gambar PNG dari aliran untuk menggambar lebih lanjut.
  • Gambarlah gambar PNG pada gambar SVG yang ada.
  • Terakhir, simpan hasilnya.

Cuplikan kode berikut menunjukkan cara menggambar gambar vektor di C#.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

using (MemoryStream drawnImageStream = new MemoryStream())
{
    // Pertama, rasterisasi Svg ke PNG dan tulis hasilnya ke aliran.
    using (SvgImage svgImage = (SvgImage)Image.Load(templatesFolder + "template.svg"))
    {
        SvgRasterizationOptions rasterizationOptions = new SvgRasterizationOptions();
        rasterizationOptions.PageSize = svgImage.Size;

        PngOptions saveOptions = new PngOptions();
        saveOptions.VectorRasterizationOptions = rasterizationOptions;

        svgImage.Save(drawnImageStream, saveOptions);

        // Sekarang muat gambar png dari aliran untuk menggambar lebih lanjut.
        drawnImageStream.Seek(0, System.IO.SeekOrigin.Begin);
        using (RasterImage imageToDraw = (RasterImage)Image.Load(drawnImageStream))
        {
            // Menggambar pada gambar Svg yang ada.
            Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D graphics = new Aspose.Imaging.FileFormats.Svg.Graphics.SvgGraphics2D(svgImage);

            // Perkecil seluruh gambar yang digambar sebanyak 2 kali dan gambarkan ke tengah permukaan gambar.
            int width = imageToDraw.Width / 2;
            int height = imageToDraw.Height / 2;
            Point origin = new Point((svgImage.Width - width) / 2, (svgImage.Height - height) / 2);
            Size size = new Size(width, height);

            graphics.DrawImage(imageToDraw, origin, size);

            // Simpan gambar hasilnya
            using (SvgImage resultImage = graphics.EndRecording())
            {
                resultImage.Save(outputFolder + "vector_image.svg");
            }
        }
    }
}

Terapkan Masking ke Gambar

Masking dalam pengeditan gambar mengacu pada teknik menyembunyikan atau memperlihatkan bagian tertentu dari suatu gambar secara selektif. Ini melibatkan pembuatan topeng, yang pada dasarnya adalah gambar skala abu-abu yang menentukan transparansi atau opasitas setiap piksel pada gambar asli. Penyembunyian gambar dipraktikkan secara luas untuk pengenalan dan diagnostik.

Aspose.Image.Drawing menyediakan dua metode penerapan penyembunyian gambar:

  • Masking Manual - Menggunakan sekumpulan ROI sebagai mask. ROI untuk setiap irisan digunakan untuk menentukan mask. Ini membutuhkan masukan pengguna tambahan.
  • Masking Otomatis - Tidak memerlukan banyak input data dari pengguna tetapi mungkin tidak begitu akurat.

Sekarang mari kita lihat cara menerapkan masking manual dan otomatis pada gambar dalam kode C#.

Penyembunyian Gambar Manual

Cuplikan kode berikut menunjukkan cara menerapkan penyembunyian manual pada gambar di C#.

string outputFolder = @"Output\";

// Sumber data
string sourceFileName = outputFolder + "couple.png";

// Buat jalur grafis
GraphicsPath manualMask = new GraphicsPath();

// Tambahkan bentuk
Figure firstFigure = new Figure();
firstFigure.AddShape(new EllipseShape(new RectangleF(100, 30, 40, 40)));
firstFigure.AddShape(new RectangleShape(new RectangleF(10, 200, 50, 30)));

// Tambahkan gambar
manualMask.AddFigure(firstFigure);

GraphicsPath subPath = new GraphicsPath();
Figure secondFigure = new Figure();
secondFigure.AddShape(
    new PolygonShape(
     new PointF[]
     {
        new PointF(310, 100), new PointF(350, 200), new PointF(250, 200)

     }, true));

secondFigure.AddShape(new PieShape(new RectangleF(10, 10, 80, 80), 30, 120));
subPath.AddFigure(secondFigure);
manualMask.AddPath(subPath);

// Oleskan penutup
using (RasterImage image = (RasterImage)Image.Load(sourceFileName))
{
    MaskingOptions maskingOptions = new MaskingOptions()
    {
        Method = SegmentationMethod.Manual,
        Args = new ManualMaskingArgs
        {
            Mask = manualMask
        },
        Decompose = false,
        ExportOptions =
      new PngOptions()
      {
          ColorType = PngColorType.TruecolorWithAlpha,
          Source = new StreamSource(new MemoryStream())
      },
    };
    MaskingResult results = new ImageMasking(image).Decompose(maskingOptions);
    // Menyimpan hasil masking akhir.
    using (RasterImage resultImage = (RasterImage)results[1].GetImage())
    {
        resultImage.Save(outputFolder + "manual_masking.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
    }
}

Penyembunyian Gambar Otomatis

Cuplikan kode di bawah menerapkan penyembunyian otomatis pada gambar menggunakan .NET drawing API.

string outputFolder = @"Output\";

MaskingResult results;
using (RasterImage image = (RasterImage)Image.Load(outputFolder + "couple.jpg"))
{
    // Untuk menggunakan Pemotongan Grafik dengan goresan yang dihitung secara otomatis, AutoMaskingGraphCutOptions digunakan.
    AutoMaskingGraphCutOptions options = new AutoMaskingGraphCutOptions
    {
        // Menunjukkan bahwa perhitungan baru dari goresan default harus dilakukan selama dekomposisi gambar.
        CalculateDefaultStrokes = true,
        
        // Mengatur radius bulu-bulu pasca proses berdasarkan ukuran gambar.
        FeatheringRadius = (Math.Max(image.Width, image.Height) / 500) + 1,
        Method = SegmentationMethod.GraphCut,
        Decompose = false,
        ExportOptions =
            new PngOptions()
            {
                ColorType = PngColorType.TruecolorWithAlpha,
                Source = new FileCreateSource(outputFolder + "auto_masking.png")
            },
        BackgroundReplacementColor = Color.Transparent
    };

    results = new ImageMasking(image).Decompose(options);

    using (RasterImage resultImage = (RasterImage)results[1].GetImage())
    {
        resultImage.Save(outputFolder + "auto_masking_2.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
    }
}

Terapkan Filter ke Gambar

Menerapkan filter pada gambar memiliki berbagai tujuan, dan orang menggunakannya untuk berbagai alasan, baik praktis maupun artistik. Penggunaan filter gambar yang paling umum mencakup koreksi warna, peningkatan kualitas gambar, penerapan efek khusus, pengurangan noise, dan sebagainya. Aspose.Imaging.Drawing mendukung beberapa jenis filter yang dapat Anda terapkan pada gambar, seperti median, motion weiner, gauss weiner, dll.

Untuk demonstrasi, lihat kode berikut yang menerapkan filter median ke gambar menggunakan Aspose.Imaging.Drawing.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

// Muat gambar yang berisik 
using (Image image = Image.Load(templatesFolder + "template.gif"))
{
    // Masukkan gambar ke dalam RasterImage
    RasterImage rasterImage = image as RasterImage;
    if (rasterImage == null)
    {
        return;
    }

    // Buat instance kelas MedianFilterOptions dan atur ukurannya, Terapkan filter MedianFilterOptions ke objek RasterImage dan Simpan gambar yang dihasilkan
    MedianFilterOptions options = new MedianFilterOptions(4);
    rasterImage.Filter(image.Bounds, options);

    // Menyimpan gambar
    image.Save(outputFolder + "median_filter.gif");
}

Pangkas, Putar, dan Ubah Ukuran Gambar

Memotong, memutar, dan mengubah ukuran gambar dianggap sebagai fitur penting dari aplikasi pengeditan gambar. Ini adalah operasi pemrosesan gambar paling umum yang digunakan untuk memanipulasi gambar digital. Mari kita lihat cara memotong, memutar, dan mengubah ukuran gambar menggunakan Aspose.Imaging.Drawing API.

Pangkas Gambar

Untuk memotong gambar, Anda perlu memberikan nilai pergeseran untuk keempat sisi gambar. Berdasarkan nilai tersebut, batas gambar digeser ke arah tengah gambar. Cuplikan kode C# berikut memotong gambar berdasarkan nilai shift yang diberikan.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

// Muat gambar yang ada ke dalam instance kelas RasterImage
using (RasterImage rasterImage = (RasterImage)Image.Load(templatesFolder + "template.jpg"))
{
    // Sebelum dipotong, gambar harus di-cache untuk kinerja yang lebih baik
    if (!rasterImage.IsCached)
    {
        rasterImage.CacheData();
    }

    // Tentukan nilai pergeseran untuk keempat sisi
    int leftShift = 10;
    int rightShift = 10;
    int topShift = 10;
    int bottomShift = 10;

    // Berdasarkan nilai pergeserannya, terapkan cropping pada gambar. Metode Crop akan menggeser batas gambar ke arah tengah gambar dan menyimpan hasilnya ke disk
    rasterImage.Crop(leftShift, rightShift, topShift, bottomShift);

    // Simpan gambar yang dipotong
    rasterImage.Save(outputFolder + "cropped_image.jpg");
}

Memutar Gambar

Untuk memutar gambar, Aspose.Imaging.Drawing menyediakan metode RotateFlip, yang tidak hanya memutar gambar tetapi juga membaliknya (jika diperlukan). Anda dapat memilih opsi rotasi dan membalik yang diinginkan dari enum RotateFlipType. Cuplikan kode berikut menunjukkan cara memutar gambar tetapi tidak membaliknya di C#.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

// Memuat dan Memutar Gambar
using (var image = Image.Load(templatesFolder + "template.jpg"))
{
    // Putar gambar
    image.RotateFlip(RotateFlipType.Rotate270FlipNone);

    // Menyimpan gambar
    image.Save(outputFolder + "rotated_image.jpg");
}

Ubah ukuran Gambar

Mengubah ukuran gambar menggunakan Aspose.Imaging.Drawing sangatlah mudah. Panggil saja metode Resize dan teruskan nilai tinggi dan lebar yang baru. Cuplikan kode berikut menunjukkan cara mengubah ukuran gambar di C#.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

using (Image image = Image.Load(templatesFolder + "template.jpg"))
{
    // Ubah ukuran gambar
    image.Resize(300, 300);

    // Menyimpan gambar
    image.Save(outputFolder + "resized_image.jpg");
}   

Konversi Gambar ke Format Lain

Untuk mengonversi gambar menggunakan Aspose.Imaging.Drawing API, Anda hanya perlu memuat gambar dan menyimpannya dalam format output yang diinginkan. Cuplikan kode berikut mengubah gambar JPG menjadi format WebP, PSD, PDF, dan TIFF.

string templatesFolder = @"Templates\";
string outputFolder = @"Output\";

using (var img = Aspose.Imaging.Image.Load(templatesFolder + "template.jpg"))
{
    // Simpan dalam format gambar yang berbeda
    img.Save(outputFolder + "output.webp", new Aspose.Imaging.ImageOptions.WebPOptions());
    img.Save(outputFolder + "output.psd ", new Aspose.Imaging.ImageOptions.PsdOptions());
    img.Save(outputFolder + "output.tiff", new Aspose.Imaging.ImageOptions.TiffOptions(TiffExpectedFormat.Default));

    // Simpan sebagai PDF
    PdfOptions exportOptions = new PdfOptions();
    exportOptions.PdfDocumentInfo = new Aspose.Imaging.FileFormats.Pdf.PdfDocumentInfo();
    img.Save(outputFolder + "output.pdf", exportOptions);
}

Dapatkan Lisensi API Gratis

Jika Anda ingin mengevaluasi Aspose.Imaging.Drawing API, Anda bisa mendapatkan lisensi sementara gratis yang memungkinkan Anda menggunakan API secara maksimal tanpa batasan apa pun.

Kesimpulan

Di bidang grafik dan pemrosesan gambar, Aspose.Imaging.Drawing API menonjol sebagai alat serbaguna dan kuat untuk pengembang C# .NET. Baik Anda ingin menyempurnakan elemen visual, memperbaiki distorsi gambar, atau mengonversi gambar antar format, API ini menyediakan serangkaian fitur lengkap. Dengan Aspose.Imaging.Drawing, manipulasi gambar ada di ujung jari Anda, memberdayakan Anda untuk membuat grafik yang menarik dan menakjubkan secara visual secara terprogram.

Beri tahu kami masukan atau pertanyaan Anda di [forum] kami 5.