• Stars
    star
    237
  • Rank 169,885 (Top 4 %)
  • Language
    C#
  • License
    MIT License
  • Created over 7 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A .NET library for hardware-accelerated, high performance, immediate mode rendering via Direct2D.

GitHub Nuget

d2dlib

A .NET library for hardware-accelerated, high performance, immediate mode rendering via Direct2D.

By using the graphics context to draw anything on windows form, control or draw in memory via Direct2D. The graphics interface is designed like the normal Windows Form graphics interface, it's easy-to-learn and user-friendly.

Project Language Description Output DLL
d2dlib VC++ Wrapper host-side library, calling Windows SDK and Direct2D API d2dlib.dll
d2dlibexport C# Wrapper client-side library, export the interface provided from d2dlib d2dlibexport.dll
d2dwinform C# Provides the D2DWinForm and D2DControl classes that use Direct2D hardware-acceleration graphics context during rendering d2dwinform.dll

Installation

Get binary from NuGet

install-package unvell.d2dlib

Or install for x64 platform:

install-package unvell.d2dlib-x64

Notes

The Direct2D API is a platform-associated API that requires the application to be targeted to either x86 or x64 platform. To run the application uses this library correctly, the Platform target of the project settings must be set to x86 or x64.

Install manually

Learn how to install manually

Getting Started

  1. Make windows form or control inherited from D2DForm or D2DControl class
  2. Override OnRender(D2DGraphics g) method (do not override .NET OnPaint method)
  3. Draw anything inside OnRender method via the g context

Drawing

Draw rectangle

protected override void OnRender(D2DGraphics g)
{
  var rect = new D2DRect(0, 0, 10, 10);
  g.DrawRectangle(rect, D2DColor.Red);
}

Draw ellipse

var ellipse = new D2DEllipse(0, 0, 10, 10);
g.DrawEllipse(ellipse, D2DColor.Gray);

Draw text

g.DrawText("Hello World", D2DColor.Yellow, this.Font, 100, 200);

Using brush object

Solid color brush

var brush = Device.CreateSolidColorBrush(new D2DColor(1, 0, 0.5));
g.DrawEllipse(rect, brush);

Linear and radio gradient brush

var brush = Device.CreateLinearGradientBrush(new D2DPoint(0, 0), new D2DPoint(200, 100),
  new D2DGradientStop[] {
    new D2DGradientStop(0, D2DColor.White),
    new D2DGradientStop(0.5, D2DColor.Green),
    new D2DGradientStop(1, D2DColor.Black),
  });

Draw bitmap

g.DrawBitmap(bmp, this.ClientRectangle);

Convert GDI+ bitmap to Direct2D bitmap for getting high-performance rendering

// convert to Direct2D bitmap
var d2dbmp = Device.CreateBitmapFromGDIBitmap(gdiBitmap);

// draw Direct2D bitmap
g.DrawBitmap(d2dbmp, this.ClientRectangle);

Drawing on GDI+ bitmap

// create and draw on GDI+ bitmap
var gdiBmp = new Bitmap(1024, 1024);
using (Graphics g = Graphics.FromImage(gdiBmp))
{
  g.DrawString("This is GDI+ bitmap layer", new Font(this.Font.FontFamily, 48), Brushes.Black, 10, 10);
}

// draw memory bitmap on screen
g.DrawBitmap(gdiBmp, this.ClientRectangle);

Learn more about Bitmap. See Example code

Drawing on Direct2D memory bitmap

var bmpGraphics = this.Device.CreateBitmapGraphics(1024, 1024);
bmpGraphics.BeginRender();
bmpGraphics.FillRectangle(170, 790, 670, 80, new D2DColor(0.4f, D2DColor.Black));
bmpGraphics.DrawText("This is Direct2D device bitmap", D2DColor.Goldenrod, this.Font, 180, 800);
bmpGraphics.EndRender();

// draw this device bitmap on screen
g.DrawBitmap(bmpGraphics, this.ClientRectangle);

Note: When creating a Direct2D Device bitmap, do not forget call BeginRender and EndRender method.

Using transform

By calling PushTransform and PopTransform to make a transform session.

g.PushTransform();

// rotate 45 degree
g.RotateTransform(45, centerPoint);

g.DrawBitmap(mybmp, rect);
g.PopTransform();

Examples

Fast images rendering Image Drawing Test See source code

Custom draw on memory bitmap Bitmap Custom Draw See source code

Star space simulation Star Space See source code

Subtitle rendering Subtitle See source code

Whiteboard App whiteboard
See source code

More Repositories

1

PlainGraph

A small, fast and lightweight .NET Chart Control. Supports 7 types of chart that can be created from same data source interface.
C#
9
star
2

excel-minesweeper

A minesweeper game written in Excel VBA.
8
star
3

js-graphics-math

Math library for JavaScript 2D/3D graphics rendering.
JavaScript
8
star
4

waveform-box

Waveform sound playground application for Windows, written in VC++. Generating waveform from specified frequency. FFT analyzer up to 65 kHz. Support to play, read and save wav-format file.
C++
7
star
5

mjpegplayer

Simple and lightweight .NET MJPEG stream player designed to receive MJPEG stream from motion on Raspberry Pi.
C#
5
star
6

StyleTable

An enhanced .NET Table control, supports multiple cell types like drop-down or hyperlink cell.
C#
5
star
7

raygen-renderer

A simple cross-platform ray tracing engine for 3D graphics rendering.
C++
4
star
8

cpp-graphics-module

Common classes for cross-platform C++ 2D/3D graphics application.
C
3
star
9

js-input-control

A lightweight library to handle the mouse, keyboard and touch control from end-user.
JavaScript
3
star
10

cs-graphics-math

2D/3D graphics math library for C# language.
C#
3
star
11

js-drawing2d

Javascript canvas 2D drawing library. Supports both immediate-mode rendering and 2D scene rendering.
JavaScript
3
star
12

cpp-common-class

Base common classes for cross-platform C++ application development.
C++
2
star
13

tank

A classic tank game written in Java.
Java
1
star
14

rpi-sensor

Sensor library used on Raspberry Pi
C++
1
star
15

grib2_dec

A modified version of the GRIB2 data decoder which is originally provided by the Japan Meteorological Agency (JMA).
C
1
star