Programové generování vizuálních aktiv je základní požadavek v mnoha aplikacích .NET, od serverového vykreslování zpráv a generování náhledů po dynamické vytváření grafů a vodotiskových pipeline. Zatímco System.Drawing sloužil vývojářům .NET po mnoho let, má dobře známá omezení: není bezpečný pro více vláken, špatně si vede pod zátěží a oficiálně není podporován na ne‑Windows platformách v .NET 6+.

Aspose.Drawing for .NET je připravená, multiplatformní náhrada, která poskytuje rychlejší renderovací pipeline, vlákny‑bezpečná API a nativní podporu pro BMP, PNG, JPEG, GIF, TIFF a další — vše bez externích kodeků nebo závislostí na GDI+.

Tento průvodce vás provede vším, co potřebujete k vytvoření a kreslení na bitmapy v C# pomocí Aspose.Drawing: nastavení projektu, kreslení tvarů a textu, správa paměti, ladění výkonu a osvědčené postupy pro produkci.

Vytvořte a kreslete na bitmapy pomocí Aspose.Drawing for .NET

Požadavky

  • .NET 6.0 nebo novější (Visual Studio 2022 nebo JetBrains Rider doporučeno)
  • NuGet package manager nebo .NET CLI

1. Instalace pomocí konzole správce balíčků NuGet

Install-Package Aspose.Drawing

Nebo pomocí .NET CLI:

dotnet add package Aspose.Drawing

Alternativně stáhněte nejnovější binární soubory přímo ze stránky vydání a ručně odkažte na DLL.

2. Použít licenci

Bez licence knihovna běží v evaluačním režimu, který přidává vodoznak do výstupních obrázků. Pro produkční použití načtěte licenci při spuštění aplikace:

new Aspose.Drawing.License().SetLicense("Aspose.Drawing.lic");

Získejte bezplatnou dočasnou licenci pro neomezené hodnocení. Úplné ceny jsou k dispozici na stránce s cenami.

Krok za krokem: Vytvoření a kreslení na bitmapu

Krok 1 — Vytvoření instance třídy Bitmap
Vytvořte Bitmap s požadovanou šířkou, výškou a formátem pixelů. PixelFormat.Format32bppArgb se doporučuje pro obecné použití — podporuje plnou alfa průhlednost a je nejkompatibilnější formát napříč výstupními typy.

var bitmap = new Bitmap(800, 600, PixelFormat.Format32bppArgb);

Krok 2 — Získání grafického povrchu
Volání bitmap.GetGraphics() vrátí objekt Graphics. Všechny operace kreslení jsou prováděny prostřednictvím tohoto objektu. Uchovávejte jedinou instanci Graphics po celou dobu kreslicí relace — vytváření a uvolňování více instancí na stejném bitmapu je neefektivní.

using Graphics graphics = bitmap.GetGraphics();

Krok 3 — Vymazání pozadí
Vždy začněte explicitním voláním Clear(). Bez něj je počáteční stav pixelů bitmapy nedefinovaný a může obsahovat šum, zejména když je stejný buffer znovu používán napříč požadavky.

graphics.Clear(Color.White);

Krok 4 — Kreslení tvarů a textu
Použijte bohatou sadu kreslících primitiv: DrawRectangle, FillEllipse, DrawLine, DrawString a další. Změřte text před jeho umístěním, abyste dosáhli přesného zarovnání.

Krok 5 — Uložení a uvolnění
Zapište bitmapu na disk pomocí bitmap.Save(), přičemž určete cílový ImageFormat. Zabalte všechny objekty, které je třeba uvolnit, do bloků using, aby byl zajištěn úklid prostředků.

bitmap.Save("output.png", ImageFormat.Png);

Kompletní příklad kódu v C#

Následující konzolová aplikace demonstruje kompletní pracovní postup: vytvoření bitmapy, vyplnění pozadí, kreslení tvarů, vykreslení centrovaného textu a uložení do formátu PNG.

using System;
using Aspose.Drawing;
using Aspose.Drawing.Imaging;
using Aspose.Drawing.Drawing2D;

namespace BitmapDemo
{
    class Program
    {
        static void Main()
        {
            // 1. Create an 800x600 bitmap with 32-bit ARGB pixel format
            using (Bitmap bitmap = new Bitmap(800, 600, PixelFormat.Format32bppArgb))
            {
                // 2. Obtain a Graphics surface — keep one instance for all operations
                using (Graphics graphics = bitmap.GetGraphics())
                {
                    // 3. Fill background — never skip this; uninitialized pixels cause visual noise
                    graphics.Clear(Color.White);

// 4. Draw a blue rectangle border (5px stroke)
                    using (Pen bluePen = new Pen(Color.Blue, 5))
                    {
                        graphics.DrawRectangle(bluePen, new Rectangle(100, 100, 600, 400));
                    }

// 5. Fill a red ellipse inside the rectangle
                    using (Brush redBrush = new SolidBrush(Color.Red))
                    {
                        graphics.FillEllipse(redBrush, new Rectangle(200, 150, 400, 300));
                    }

// 6. Render centered text using MeasureString for precise placement
                    using (Font font = new Font("Arial", 36, FontStyle.Bold))
                    using (Brush blackBrush = new SolidBrush(Color.Black))
                    {
                        string text = "Aspose.Drawing Demo";

// MeasureString returns the rendered text bounds at this font/size
                        SizeF textSize = graphics.MeasureString(text, font);

PointF location = new PointF(
                            (bitmap.Width  - textSize.Width)  / 2f,
                            (bitmap.Height - textSize.Height) / 2f
                        );

graphics.DrawString(text, font, blackBrush, location);
                    }
                }

// 7. Save as PNG — change ImageFormat to Jpeg, Bmp, Tiff, etc. as needed
                bitmap.Save("DemoOutput.png", ImageFormat.Png);
            }

Console.WriteLine("✓ Bitmap saved as DemoOutput.png");
        }
    }
}

Před nasazením do produkce: Aktualizujte "DemoOutput.png" na absolutní nebo prostředím řešenou cestu. Použijte svou licenci před jakoukoli operací kreslení. Otestujte všechny cílové výstupní formáty. Viz oficiální dokumentaci nebo fórum podpory pro pomoc.

FAQ

Q: Jak vytvořit a kreslit na bitmapu pomocí Aspose.Drawing v C#?
Instancujte Bitmap s šířkou, výškou a PixelFormat, zavolejte bitmap.GetGraphics() pro získání povrchu Graphics, použijte kreslicí metody jako DrawRectangle, FillEllipse a DrawString a poté uložte pomocí bitmap.Save(). Kompletní ukázkový kód výše pokrývá celý pracovní postup.

Q: Jaké formáty obrázků podporuje Aspose.Drawing pro ukládání?
BMP, PNG, JPEG, GIF, TIFF a několik dalších. Formát specifikujte pomocí výčtu ImageFormat při volání Save() — například ImageFormat.Jpeg nebo ImageFormat.Tiff. Není vyžadován žádný externí kodek.

Q: Jak zabránit únikům paměti při zpracování velkého počtu obrázků?
Zabalte každý Bitmap, Graphics, Pen, Brush a Font do bloku using. Znovu použijte objekt Graphics pro veškeré kreslení na jednom bitmapu místo vytváření více instancí. Vyhněte se zbytečným voláním Clone().

Q: Je Aspose.Drawing vlákny bezpečný pro paralelní zpracování?
Ano, na úrovni bitmapy. Každá instance Bitmap je nezávislá a může být zpracována na samostatném vlákně. Nesdílejte jedinou instanci Bitmap nebo Graphics napříč vlákny bez externí synchronizace.

Q: Jak přesně vycentrovat text na bitmapě?
Použijte graphics.MeasureString(text, font) k získání vykreslené velikosti SizeF vašeho řetězce, poté vypočtěte levý horní bod PointF jako ((bitmapWidth - textWidth) / 2, (bitmapHeight - textHeight) / 2). Toto funguje správně pro jakoukoli velikost písma, tloušťku ani délku řetězce.

Q: Mohu použít Aspose.Drawing na Linuxu nebo macOS v projektu .NET 6+?
Ano — to je jedna z hlavních výhod Aspose.Drawing oproti System.Drawing. Knihovna je plně multiplatformní a nevyžaduje žádné nativní závislosti GDI+.

Závěr

Aspose.Drawing for .NET poskytuje vývojářům C# připravené k nasazení, multiplatformní API pro kreslení bitmap, které odstraňuje omezení platformy a problémy s bezpečností vláken v System.Drawing. S méně než 30 řádky kódu můžete vytvořit bitmapu, vykreslit tvary a text s antialiasingem a uložit do libovolného hlavního formátu obrázku.

Použijte vzory řízení zdrojů a strategie dávkového zpracování v tomto průvodci při vytváření pipeline pro zpracování obrázků ve velkém měřítku. Pro vyzkoušení si pořiďte bezplatnou dočasnou licenci. Úplné informace o cenách jsou na stránce s cenami.

Číst dál

Máte otázky nebo zpětnou vazbu? Navštivte Aspose.Drawing fórum podpory.