Skip to content

Commit 9088e4a

Browse files
committed
Merge branch 'release/v0.9'
2 parents 2afdf67 + a27c6d7 commit 9088e4a

File tree

22 files changed

+199
-120
lines changed

22 files changed

+199
-120
lines changed

src/ImageVisualizer14/ImageForm.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,28 @@ public static Font UIFont
2020
get
2121
{
2222
#if VS10
23-
var dteProgID = "VisualStudio.DTE.10.0";
23+
string dteProgID = "VisualStudio.DTE.10.0";
2424
#elif VS11
25-
var dteProgID = "VisualStudio.DTE.11.0";
25+
string dteProgID = "VisualStudio.DTE.11.0";
2626
#elif VS12
27-
var dteProgID = "VisualStudio.DTE.12.0";
27+
string dteProgID = "VisualStudio.DTE.12.0";
2828
#elif VS13
29-
var dteProgID = "VisualStudio.DTE.13.0";
29+
string dteProgID = "VisualStudio.DTE.13.0";
3030
#elif VS14
31-
var dteProgID = "VisualStudio.DTE.14.0";
31+
string dteProgID = "VisualStudio.DTE.14.0";
3232
#elif VS15
33-
var dteProgID = "VisualStudio.DTE.15.0";
33+
string dteProgID = "VisualStudio.DTE.15.0";
3434
#elif VS16
35-
var dteProgID = "VisualStudio.DTE.16.0";
35+
string dteProgID = "VisualStudio.DTE.16.0";
3636
#endif
3737
var dte = (EnvDTE.DTE)Marshal.GetActiveObject(dteProgID);
3838
var fontProperty = dte.Properties["FontsAndColors", "Dialogs and Tool Windows"];
3939
if (fontProperty != null)
4040
{
4141
object objValue = fontProperty.Item("FontFamily").Value;
42-
var fontFamily = objValue.ToString();
42+
string fontFamily = objValue.ToString();
4343
objValue = fontProperty.Item("FontSize").Value;
44-
var fontSize = Convert.ToSingle(objValue);
44+
float fontSize = Convert.ToSingle(objValue);
4545
var font = new Font(fontFamily, fontSize);
4646

4747
return font;
@@ -83,7 +83,7 @@ public ImageForm(IVisualizerObjectProvider objectProvider)
8383
if (objectBitmap is Bitmap)
8484
{
8585
var hObject = ((Bitmap)objectBitmap).GetHbitmap();
86-
86+
8787
try
8888
{
8989
bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(

src/ImageVisualizer14/ImageVisualizer.cs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,28 @@
55
using Microsoft.VisualStudio.Utilities;
66
#endif
77

8-
//System.Drawing.Bitmap
9-
[assembly: System.Diagnostics.DebuggerVisualizer(typeof(ImageVisualizer), typeof(VisualizerObjectSource), Target = typeof(System.Drawing.Bitmap), Description = "Image Visualizer")]
10-
//System.Windows.Media.ImageSource, System.Windows.Media.Imaging.BitmapImage, System.Windows.Media.Imaging.BitmapSource
11-
[assembly: System.Diagnostics.DebuggerVisualizer(typeof(ImageVisualizer), typeof(ImageVisualizerObjectSource), Target = typeof(System.Windows.Media.ImageSource), Description = "Image Visualizer")]
8+
// System.Drawing.Bitmap
9+
[assembly: System.Diagnostics.DebuggerVisualizer(
10+
typeof(ImageVisualizer),
11+
#if VS16
12+
typeof(ImageVisualizerBitmapObjectSource),
13+
#else
14+
typeof(VisualizerObjectSource),
15+
#endif
16+
Target = typeof(System.Drawing.Bitmap),
17+
Description = "Image Visualizer")]
18+
19+
// System.Windows.Media.Imaging.BitmapImage, System.Windows.Media.Imaging.BitmapSource
20+
[assembly: System.Diagnostics.DebuggerVisualizer(
21+
typeof(ImageVisualizer),
22+
typeof(ImageVisualizerObjectSource),
23+
Target = typeof(System.Windows.Media.Imaging.BitmapSource),
24+
Description = "Image Visualizer")]
1225

1326
namespace Aberus.VisualStudio.Debugger.ImageVisualizer
1427
{
1528
/// <summary>
16-
/// A Visualizer for <see cref="System.Windows.Media.ImageSource"/> and <see cref="System.Drawing.Bitmap"/>.
29+
/// A Visualizer for <see cref="System.Windows.Media.Imaging.BitmapSource"/> and <see cref="System.Drawing.Bitmap"/>.
1730
/// </summary>
1831
public class ImageVisualizer : DialogDebuggerVisualizer
1932
{

src/ImageVisualizer14/ImageVisualizerObjectSource.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ public class ImageVisualizerObjectSource : VisualizerObjectSource
99
{
1010
public override void GetData(object target, Stream outgoingData)
1111
{
12-
if (target is ImageSource image)
13-
base.GetData(new SerializableBitmapImage((BitmapSource)image), outgoingData);
12+
if (target is BitmapSource image)
13+
base.GetData(new SerializableBitmapImage(image), outgoingData);
1414
else
1515
base.GetData(target, outgoingData);
1616
}

src/ImageVisualizer14/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("0.8.0.0")]
36-
[assembly: AssemblyFileVersion("0.8.0.0")]
35+
[assembly: AssemblyVersion("0.9.0.0")]
36+
[assembly: AssemblyFileVersion("0.9.0.0")]

src/ImageVisualizer14/SerializableBitmapImage.cs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,9 @@ public class SerializableBitmapImage : ISerializable
1212
public BitmapSource bitmapSource;
1313
private readonly string expression;
1414

15-
public BitmapImage Image { get; private set; }
16-
1715
public SerializableBitmapImage(BitmapImage image)
1816
{
19-
this.Image = image;
17+
bitmapSource = image;
2018
}
2119

2220
public SerializableBitmapImage(BitmapSource source)
@@ -37,12 +35,14 @@ protected SerializableBitmapImage(SerializationInfo info, StreamingContext conte
3735
var stream = new MemoryStream(array);
3836
stream.Seek(0, SeekOrigin.Begin);
3937

40-
Image = new BitmapImage();
41-
Image.CacheOption = BitmapCacheOption.OnLoad;
42-
Image.BeginInit();
43-
Image.StreamSource = stream;
44-
Image.EndInit();
45-
Image.Freeze();
38+
var bitmapImage = new BitmapImage();
39+
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
40+
bitmapImage.BeginInit();
41+
bitmapImage.StreamSource = stream;
42+
bitmapImage.EndInit();
43+
bitmapImage.Freeze();
44+
45+
bitmapSource = bitmapImage;
4646
}
4747
}
4848
catch (ExternalException)
@@ -78,27 +78,26 @@ public static implicit operator SerializableBitmapImage(BitmapImage bitmapImage)
7878

7979
public static implicit operator BitmapImage(SerializableBitmapImage serializableBitmapImage)
8080
{
81-
return serializableBitmapImage.Image;
81+
return (BitmapImage)serializableBitmapImage.bitmapSource;
8282
}
8383

8484
//[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
8585
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
8686
{
87-
var source = Image ?? bitmapSource;
88-
89-
if (source != null)
87+
if (bitmapSource != null)
9088
{
9189
using (var memoryStream = new MemoryStream())
9290
{
9391
var encoder = new PngBitmapEncoder();
94-
encoder.Frames.Add(BitmapFrame.Create(source));
92+
//TODO try/catch
93+
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
9594
encoder.Save(memoryStream);
9695
memoryStream.Seek(0, SeekOrigin.Begin);
9796

9897
info.AddValue("Image", memoryStream.ToArray(), typeof(byte[]));
9998
}
10099

101-
info.AddValue("Name", source.ToString());
100+
info.AddValue("Name", bitmapSource.ToString());
102101
}
103102
}
104103

src/ImageVisualizer16.Common/ImageVisualizer16.Common.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,10 @@
1111
<Compile Include="..\ImageVisualizer14\SerializableBitmapImage.cs" Link="SerializableBitmapImage.cs" />
1212
</ItemGroup>
1313

14+
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
15+
<PackageReference Include="System.Drawing.Common">
16+
<Version>4.5.0</Version>
17+
</PackageReference>
18+
</ItemGroup>
19+
1420
</Project>
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
using System;
2+
using System.Drawing;
3+
using System.IO;
4+
using System.Runtime.InteropServices;
5+
using System.Runtime.Serialization;
6+
7+
namespace Aberus.VisualStudio.Debugger.ImageVisualizer
8+
{
9+
[Serializable]
10+
public class SerializableBitmap : ISerializable
11+
{
12+
private readonly Bitmap bitmap;
13+
private readonly string expression;
14+
15+
public SerializableBitmap(Bitmap bitmap)
16+
{
17+
this.bitmap = bitmap;
18+
}
19+
20+
protected SerializableBitmap(SerializationInfo info, StreamingContext context)
21+
{
22+
foreach (var i in info)
23+
{
24+
if (string.Equals(i.Name, "Bitmap", StringComparison.OrdinalIgnoreCase))
25+
{
26+
try
27+
{
28+
if (i.Value is byte[] array)
29+
{
30+
var stream = new MemoryStream(array);
31+
stream.Seek(0, SeekOrigin.Begin);
32+
33+
bitmap = new Bitmap(stream);
34+
35+
}
36+
}
37+
catch (ExternalException)
38+
{
39+
}
40+
catch (ArgumentException)
41+
{
42+
}
43+
catch (OutOfMemoryException)
44+
{
45+
}
46+
catch (InvalidOperationException)
47+
{
48+
}
49+
catch (NotImplementedException)
50+
{
51+
}
52+
catch (FileNotFoundException)
53+
{
54+
}
55+
}
56+
else if (string.Equals(i.Name, "Name", StringComparison.OrdinalIgnoreCase))
57+
{
58+
expression = (string)i.Value;
59+
}
60+
}
61+
}
62+
63+
public static implicit operator SerializableBitmap(Bitmap bitmap)
64+
{
65+
return new SerializableBitmap(bitmap);
66+
}
67+
68+
public static implicit operator Bitmap(SerializableBitmap serializableBitmap)
69+
{
70+
return serializableBitmap.bitmap;
71+
}
72+
73+
public void GetObjectData(SerializationInfo info, StreamingContext context)
74+
{
75+
var source = bitmap;
76+
77+
if (source != null)
78+
{
79+
using (var memoryStream = new MemoryStream())
80+
{
81+
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
82+
//TODO try/catch
83+
memoryStream.Seek(0, SeekOrigin.Begin);
84+
85+
info.AddValue("Bitmap", memoryStream.ToArray(), typeof(byte[]));
86+
}
87+
88+
info.AddValue("Name", source.ToString());
89+
}
90+
}
91+
92+
public override string ToString()
93+
{
94+
if (!string.IsNullOrEmpty(expression))
95+
return expression;
96+
97+
return base.ToString();
98+
}
99+
}
100+
}

src/ImageVisualizer16.DebuggeeSide/ImageVisualizer16.DebuggeeSide.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,11 @@
2929
<HintPath>C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\Packages\Debugger\Visualizers\net2.0\Microsoft.VisualStudio.DebuggerVisualizers.dll</HintPath>
3030
</Reference>
3131
</ItemGroup>
32+
33+
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
34+
<PackageReference Include="System.Drawing.Common">
35+
<Version>4.5.0</Version>
36+
</PackageReference>
37+
</ItemGroup>
3238

3339
</Project>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#if NETCOREAPP3_0_OR_GREATER
2+
using System.Drawing;
3+
#endif
4+
using System.IO;
5+
using Microsoft.VisualStudio.DebuggerVisualizers;
6+
7+
namespace Aberus.VisualStudio.Debugger.ImageVisualizer
8+
{
9+
public class ImageVisualizerBitmapObjectSource : VisualizerObjectSource
10+
{
11+
public override void GetData(object target, Stream outgoingData)
12+
{
13+
#if NETCOREAPP3_0_OR_GREATER
14+
if (target is Bitmap bitmap && !bitmap.GetType().IsSerializable)
15+
base.GetData(new SerializableBitmap(bitmap), outgoingData);
16+
17+
else
18+
#endif
19+
base.GetData(target, outgoingData);
20+
}
21+
}
22+
}

src/ImageVisualizerPackage/ImageVisualizerPackage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ namespace Aberus.VisualStudio.Debugger.ImageVisualizer
3737
/// </para>
3838
/// </remarks>
3939
[PackageRegistration(UseManagedResourcesOnly = true)]
40-
[InstalledProductRegistration("#110", "#112", "0.8.0", IconResourceID = 400)] // Info on this package for Help/About
40+
[InstalledProductRegistration("#110", "#112", "0.9.0", IconResourceID = 400)] // Info on this package for Help/About
4141
[Guid(ImageVisualizerPackage.PackageGuidString)]
4242
[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "pkgdef, VS and vsixmanifest are valid VS terms")]
4343
public sealed class ImageVisualizerPackage : Package

0 commit comments

Comments
 (0)