Also GDI+ bietet zum Laden und operieren sicherlich einen Haufen Wege an. Wenn Du die nicht gehen willst, musst Du es eben selbst machen. Welchen Weg soll es denn sonst noch geben?
GDI+ bietet die Möglichkeit an, Bitmaps von der Platte als System.Drawing.Bitmap zu laden. Allerdings akzeptiert Direct2D z.B. für DrawBitmap nur Bitmaps vom Typ SlimDX.Direct2D.Bitmap. Die beiden Typen sind aber nicht ohne weiteres kompatibel, sodass man das System.Drawing.Bitmap aufwändig konvertieren muss.
Dieses Codebeispiel für die Konvertierung habe ich z.B.
hier gefunden.
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//Load a Direct2D bitmap from the given gdi resource.
public D2D.Bitmap LoadBitmap(Bitmap drawingBitmap)
{
D2D.Bitmap result = null;
//Lock the gdi resource
BitmapData drawingBitmapData = drawingBitmap.LockBits(
new Rectangle(0, 0, drawingBitmap.Width, drawingBitmap.Height),
ImageLockMode.ReadOnly, PixelFormat.Format32bppPArgb);
//Prepare loading the image from gdi resource
DataStream dataStream = new DataStream(drawingBitmapData.Scan0, drawingBitmapData.Stride * drawingBitmapData.Height, true, false);
D2D.BitmapProperties properties = new D2D.BitmapProperties();
properties.PixelFormat = new D2D.PixelFormat(DXGI.Format.B8G8R8A8_UNorm, D2D.AlphaMode.Premultiplied);
//Load the image from the gdi resource
result = new D2D.Bitmap(rendertarget, new Size(drawingBitmap.Width, drawingBitmap.Height), dataStream, drawingBitmapData.Stride, properties);
//Unlock the gdi resource
drawingBitmap.UnlockBits(drawingBitmapData);
return result;
}
|
Meiner Meinung nach ist das Laden eines D2D-Bitmaps relativ viel Aufwand, dafür dass dies bei GDI+ mit nur einem Befehl geht (Bitmap.LoadFromFile). Aber solange es funktioniert...