1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
/// <summary>
/// 在底图上画指定路径的图片
/// </summary>
/// <param name="g">画板实例</param>
/// <param name="path">图片路径</param>
/// <param name="totalWidth">画区总长度</param>
/// <param name="totalHeight">画区总高度</param>
/// <param name="px">起点X坐标</param>
/// <param name="py">起点Y坐标</param>
private
void
FontPic(
ref
Graphics g,
string
path,
int
totalWidth,
int
totalHeight,
int
px,
int
py)
{
if
(File.Exists(path))
{
var pImg = Image.FromFile(path);
//如果图片大于画布区域,则缩小
if
(totalHeight < pImg.Height && totalWidth < pImg.Width)
{
Image newPic = GetReducedImage(pImg, totalWidth, totalHeight);
if
(newPic !=
null
)
{
DrawPic(
ref
g, totalWidth, totalHeight, px, py, newPic);
}
}
else
if
(totalHeight < pImg.Height && totalWidth >= pImg.Width)
{
Image newPic = GetReducedImage(pImg, pImg.Width, totalHeight);
if
(newPic !=
null
)
{
DrawPic(
ref
g, totalWidth, totalHeight, px, py, newPic);
}
}
else
if
(totalHeight >= pImg.Height && totalWidth < pImg.Width)
{
Image newPic = GetReducedImage(pImg, totalWidth, pImg.Height);
if
(newPic !=
null
)
{
DrawPic(
ref
g, totalWidth, totalHeight, px, py, newPic);
}
}
else
{
DrawPic(
ref
g, totalWidth, totalHeight, px, py, pImg);
}
}
}
/// <summary>
/// 在图上画图片
/// </summary>
/// <param name="g">画板实例</param>
/// <param name="totalWidth">画区总长度</param>
/// <param name="totalHeight">画区总高度</param>
/// <param name="px">起点X坐标</param>
/// <param name="py">起点Y坐标</param>
/// <param name="pImg">要画的图片实例</param>
private
void
DrawPic(
ref
Graphics g,
int
totalWidth,
int
totalHeight,
int
px,
int
py, Image pImg)
{
px += GetValue(totalWidth, pImg.Width);
py += GetValue(totalHeight, pImg.Height);
g.DrawImage(
new
Bitmap(pImg,
new
Size(GetSize(totalWidth, pImg.Width), GetSize(totalHeight, pImg.Height))),
new
Rectangle(px, py, totalWidth, totalHeight),
0, 0, totalWidth, totalHeight, GraphicsUnit.Pixel);
}
/// <summary>
/// 生成缩略图重载方法1,返回缩略图的Image对象
/// </summary>
/// <param name="width">缩略图的宽度</param>
/// <param name="height">缩略图的高度</param>
/// <returns>缩略图的Image对象</returns>
public
Image GetReducedImage(Image resourceImage,
int
width,
int
height)
{
try
{
Image data =
null
;
//用指定的大小和格式初始化Bitmap类的新实例
using
(Bitmap bitmap =
new
Bitmap(width, height, PixelFormat.Format32bppArgb))
{
//从指定的Image对象创建新Graphics对象
using
(Graphics graphics = Graphics.FromImage(bitmap))
{
//清除整个绘图面并以透明背景色填充
//graphics.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片对象
graphics.DrawImage(resourceImage,
new
Rectangle(0, 0, width, height));
}
data =
new
Bitmap(bitmap);
}
return
data;
}
catch
(Exception e)
{
throw
e;
}
}
/// <summary>
/// 比较两个值,得到给到给定值(判断是否越界)
/// </summary>
/// <param name="total">总长度</param>
/// <param name="width">指定长度</param>
/// <returns></returns>
public
int
GetSize(
int
total,
int
width)
{
if
(total > width)
{
return
width;
}
else
{
return
total;
}
}
/// <summary>
/// 更加传入的值计算得到新值(计算点坐标)
/// </summary>
/// <param name="total">总长度</param>
/// <param name="width">指定长度</param>
/// <returns></returns>
private
int
GetValue(
int
total,
int
width)
{
return
(total - width) / 2;
}
/// <summary>
/// 在图片上画出文字
/// </summary>
/// <param name="g">图片对象</param>
/// <param name="pointX">文字x坐标</param>
/// <param name="pointY">文字y坐标</param>
/// <param name="word">文字内容</param>
/// <param name="textWidth">文本宽度</param>
/// <param name="textHeight">文本高度</param>
private
static
void
DrawStringWord(Graphics g,
int
pointX,
int
pointY,
string
word,
int
textWidth,
int
textHeight,
int
fontSize = 30)
{
Font font =
new
Font(
"微软雅黑"
, fontSize, (FontStyle.Regular));
RectangleF textArea =
new
RectangleF(pointX, pointY, textWidth, textHeight);
Brush brush =
new
SolidBrush(Color.Black);
g.DrawString(word, font, brush, textArea);
}
|
C#实现在底图上动态生成文字和图片
猜你喜欢
转载自www.cnblogs.com/lhbit342/p/10947030.html
今日推荐
周排行