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
- Použití System.Drawing v aplikaci Blazor WebAssembly v C#
- Jak vytvořit a kreslit na bitmapy v Javě s Aspose.Drawing
- Jak kreslit text v C#
Máte otázky nebo zpětnou vazbu? Navštivte Aspose.Drawing fórum podpory.
