Ich habe ein System.Windows.Media.Drawing
Objekt, das ich in ein Bitmap
Objekt konvertieren möchte, und dann von dort die Bytes extrahieren, die das Bild darstellen. Ich habe über das Internet nachgeschaut und ich finde nicht, wie ich das tun kann, was ich brauche, also würde jede Hilfe geschätzt werden.Konvertieren eines System.Windows.Media.Drawing-Objekts in Bitmap-Bytes
1
A
Antwort
0
So fand ich endlich einen Weg ein System.Windows.Media.Drawing
Objekt zu einem System.Drawing.Bitmap
Objekt zu konvertieren, und dass ein byte[]
Objekt erhalten, die Bilddaten darstellen. Das Folgende ist nicht schön, aber funktioniert tatsächlich.
public static byte[] DrawingToBytes(Drawing drawing)
{
DrawingVisual visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
// If using the BitmapEncoder uncomment the following line to get a white background.
// context.DrawRectangle(Brushes.White, null, drawing.bounds);
context.DrawDrawing(drawing);
}
int width = (int)(drawing.Bounds.Width)
int height = (int)(drawing.Bounds.Height)
Bitmap bmp = new Bitmap(width, height);
Bitmap bmpOut;
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(System.Drawing.Color.White);
RenderTargetBitmap rtBmp = new RenderTargetBitmap(width, height,
bmp.HorizontalResolution,
bmp.VerticalResolution,
PixelFormats.Pbgra32);
rtBmp.Render(visual);
// Alternative using BmpBitmapEncoder, use in place of what comes after if you wish.
// MemoryStream stream = new MemoryStream();
// BitmapEncoder encoder = new BmpBitmapEncoder();
// encoder.Frames.Add(BitmapFrame.Create(rtBmp));
// encoder.save(stream);
int stride = width * ((rtBmp.Format.BitsPerPixel + 7)/8);
byte[] bits = new byte[height * stride];
bitmapSource.CopyPixels(bits, stride, 0);
unsafe
{
fixed (byte* pBits = bits)
{
IntPtr ptr = new IntPtr(pBits);
bmpOut = new Bitmap(width, height, stride,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb, ptr);
}
}
g.DrawImage(bmpOut, 0, 0, bmp.Width, bmp.Height);
}
byte[] bytes;
using (MemoryStream ms = new MemoryStream())
{
bmp.Save(ms, ImageFormat.bmp);
data = ms.ToArray();
}
return bytes;
}
Also ja, es ist schrecklich, aber es funktioniert tatsächlich.
Verwandte Themen
- 1. Konvertieren eines Datenrahmens in xts
- 2. Konvertieren eines WS in WAP
- 3. Konvertieren eines VBScript in C#
- 4. Konvertieren eines NSObject in NSData
- 5. Konvertieren eines Menschen in 3D
- 6. Konvertieren eines ASTNode in Code
- 7. Konvertieren eines Zeichens in keycode
- 8. Konvertieren eines char * in int
- 9. Konvertieren eines NSString * in char?
- 10. Konvertieren eines Bilds in Graustufen
- 11. Konvertieren eines Datums in COBOL
- 12. Konvertieren eines Datums in Text in VBA
- 13. Konvertieren eines Bildes in Graustufen in Go
- 14. Konvertieren eines Int in QBytearray in Qt
- 15. Konvertieren eines XMLDocument in E4X in AS3?
- 16. Kakao - Konvertieren eines Doppel in Zeichenfolge
- 17. Konvertieren eines RGB-Farbwerts in ein Hexadezimal
- 18. Konvertieren eines Objekts in eine Funktion
- 19. Konvertieren eines [] Bytes mit Strings in Dezimalwerte
- 20. Konvertieren eines Stils in ng-Stil
- 21. Konvertieren eines dict in eine OrderedDict
- 22. Konvertieren eines nicht-Maven-Projekts in maven
- 23. Konvertieren eines Datenrahmens in mehrere Index-Datenrahmen
- 24. Konvertieren eines Projekts von C++ in C#
- 25. Konvertieren eines Wörterbuch in eine Liste
- 26. Konvertieren eines HtmlElement in ein Image?
- 27. Konvertieren eines IntPtr-Fensterhandles in IWin32Window^
- 28. Konvertieren eines Skripts in GUI mit Tkinter
- 29. Konvertieren eines Objekts in ein Zeichenfolgenarray
- 30. Konvertieren eines WriteableBitmap-Image ToArray in UWP
Können Sie Code verwenden? Was für einen Fehler hast du? – aloisdg
Es ist kein Fehler, ich weiß einfach nicht, wie ich von einem Objekt zum anderen komme. –
Ja das habe ich getan, das habe ich in meiner Frage gesagt. Nach mehr Nachforschungen gestern habe ich einen Weg gefunden, der ein 'DrawingVisual' verwendet, um einen 'DrawingContext' zu erstellen, in den ich meine' Drawing' zeichne. Von da aus kann ich zu einer' Bitmap' oder 'BitmapSource' gelangen Objekt durch einen anderen Umweg, der mich schließlich die Bytes durch einen 'MemoryStream' extrahieren lässt. Es ist nicht schön, und ich fand das erst gestern spät, als ich verschiedene Bits zusammenfügte, die ich online fand. –