Einen schönen guten Morgen,
ich versuche gerade ein System.Drawing.Bitmap zu einer BitmapSource zu konvertieren und habe dieses Codeschnipsel gefunden:
Da unterstreicht er mir das
Das Attribut "MarshalAsAttribute" kann nicht auf "DeleteObject" angewendet werden, da das Attribut für diesen Deklarationstyp nicht gültig ist.
Das Original-Codeschnipsel in C# sieht so aus:
Ich gehe davon aus, dass das bloss ein Übersetzungsfehler ist, aber weiss jemand wie man das behebt?
ich versuche gerade ein System.Drawing.Bitmap zu einer BitmapSource zu konvertieren und habe dieses Codeschnipsel gefunden:
VB.NET-Quellcode
- Public Class Deck
- Public Function BitmapToBitmapSource(ByVal source As System.Drawing.Bitmap) As BitmapSource
- Dim bitSrc As BitmapSource = Nothing
- Dim hBitmap = source.GetHbitmap()
- Try
- bitSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions())
- Catch __unusedWin32Exception1__ As Win32Exception
- bitSrc = Nothing
- Finally
- NativeMethods.DeleteObject(hBitmap)
- End Try
- Return bitSrc
- End Function
- End Class
- Friend Module NativeMethods
- <DllImport("gdi32.dll")>
- <MarshalAs(UnmanagedType.Bool)>
- Friend Function DeleteObject(ByVal hObject As IntPtr) As Boolean
- End Function
- End Module
Da unterstreicht er mir das
MarshalAs
in Zeile 20 rot mit dieser Meldunng:Das Attribut "MarshalAsAttribute" kann nicht auf "DeleteObject" angewendet werden, da das Attribut für diesen Deklarationstyp nicht gültig ist.
Das Original-Codeschnipsel in C# sieht so aus:
C#-Quellcode
- /// <summary>
- /// Converts a <see cref="System.Drawing.Bitmap"/> into a WPF <see cref="BitmapSource"/>.
- /// </summary>
- /// <remarks>Uses GDI to do the conversion. Hence the call to the marshalled DeleteObject.
- /// </remarks>
- /// <param name="source">The source bitmap.</param>
- /// <returns>A BitmapSource</returns>
- public static BitmapSource ToBitmapSource(this System.Drawing.Bitmap source)
- {
- BitmapSource bitSrc = null;
- var hBitmap = source.GetHbitmap();
- try
- {
- bitSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
- hBitmap,
- IntPtr.Zero,
- Int32Rect.Empty,
- BitmapSizeOptions.FromEmptyOptions());
- }
- catch (Win32Exception)
- {
- bitSrc = null;
- }
- finally
- {
- NativeMethods.DeleteObject(hBitmap);
- }
- return bitSrc;
- }
- /// <summary>
- /// FxCop requires all Marshalled functions to be in a class called NativeMethods.
- /// </summary>
- internal static class NativeMethods
- {
- [DllImport("gdi32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- internal static extern bool DeleteObject(IntPtr hObject);
- }
Ich gehe davon aus, dass das bloss ein Übersetzungsfehler ist, aber weiss jemand wie man das behebt?