Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ImportedProjects
SVG
Commits
fdaeac02
Commit
fdaeac02
authored
Dec 16, 2013
by
Jay
Browse files
Minimal image tag support for raster images
parent
a6baed2f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Source/Basic Shapes/SvgImage.cs
View file @
fdaeac02
using
System
;
using
System
;
using
System.Diagnostics
;
using
System.Drawing
;
using
System.Drawing
;
using
System.Drawing.Drawing2D
;
using
System.Drawing.Drawing2D
;
using
Svg.Transforms
;
using
System.IO
;
using
System.Net
;
using
Svg.Transforms
;
namespace
Svg
namespace
Svg
{
{
...
@@ -91,14 +94,65 @@ namespace Svg
...
@@ -91,14 +94,65 @@ namespace Svg
/// <summary>
/// <summary>
/// Renders the <see cref="SvgElement"/> and contents to the specified <see cref="Graphics"/> object.
/// Renders the <see cref="SvgElement"/> and contents to the specified <see cref="Graphics"/> object.
/// </summary>
/// </summary>
protected
override
void
Render
(
SvgRenderer
renderer
)
protected
override
void
Render
(
SvgRenderer
renderer
)
{
{
if
(
Width
.
Value
>
0.0f
&&
Height
.
Value
>
0.0f
)
if
(
Width
.
Value
>
0.0f
&&
Height
.
Value
>
0.0f
&&
this
.
Href
!=
null
)
{
{
//TODO:
using
(
Image
b
=
GetImage
(
this
.
Href
))
//base.Render(renderer);
{
}
if
(
b
!=
null
)
{
this
.
PushTransforms
(
renderer
);
this
.
SetClip
(
renderer
);
RectangleF
srcRect
=
new
RectangleF
(
0
,
0
,
b
.
Width
,
b
.
Height
);
var
destRect
=
new
RectangleF
(
this
.
Location
.
ToDeviceValue
(),
new
SizeF
(
Width
.
ToDeviceValue
(),
Height
.
ToDeviceValue
()));
renderer
.
DrawImage
(
b
,
destRect
,
srcRect
,
GraphicsUnit
.
Pixel
);
this
.
ResetClip
(
renderer
);
this
.
PopTransforms
(
renderer
);
}
}
// TODO: cache images... will need a shared context for this
// TODO: support preserveAspectRatio, etc
}
}
protected
Image
GetImage
(
Uri
uri
)
{
try
{
// should work with http: and file: protocol urls
var
httpRequest
=
WebRequest
.
Create
(
uri
);
using
(
WebResponse
webResponse
=
httpRequest
.
GetResponse
())
{
MemoryStream
ms
=
BufferToMemoryStream
(
webResponse
.
GetResponseStream
());
Image
b
=
Bitmap
.
FromStream
(
ms
);
return
b
;
}
}
catch
(
Exception
ex
)
{
Trace
.
TraceError
(
"Error loading image: '{0}', error: {1} "
,
uri
,
ex
.
Message
);
return
null
;
}
}
protected
static
MemoryStream
BufferToMemoryStream
(
Stream
input
)
{
byte
[]
buffer
=
new
byte
[
4
*
1024
];
int
len
;
MemoryStream
ms
=
new
MemoryStream
();
while
((
len
=
input
.
Read
(
buffer
,
0
,
buffer
.
Length
))
>
0
)
{
ms
.
Write
(
buffer
,
0
,
len
);
}
ms
.
Seek
(
0
,
SeekOrigin
.
Begin
);
return
ms
;
}
}
...
...
Source/SvgRenderer.cs
View file @
fdaeac02
...
@@ -52,6 +52,11 @@ namespace Svg
...
@@ -52,6 +52,11 @@ namespace Svg
this
.
_innerGraphics
.
DrawImageUnscaled
(
image
,
location
);
this
.
_innerGraphics
.
DrawImageUnscaled
(
image
,
location
);
}
}
public
void
DrawImage
(
Image
image
,
RectangleF
destRect
,
RectangleF
srcRect
,
GraphicsUnit
graphicsUnit
)
{
_innerGraphics
.
DrawImage
(
image
,
destRect
,
srcRect
,
graphicsUnit
);
}
public
void
SetClip
(
Region
region
)
public
void
SetClip
(
Region
region
)
{
{
this
.
_innerGraphics
.
SetClip
(
region
,
CombineMode
.
Complement
);
this
.
_innerGraphics
.
SetClip
(
region
,
CombineMode
.
Complement
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment