(原創) 如何将图片转成Binary Image? (.NET) (ASP.NET) (C#) (GDI+) (Image Processing)
这是我修Computer Vision的作业,此源代码也示范出如何Pixel By Pixel的方式编辑图片以及如何读取indexd的bmp图片格式。
所谓的Binary Image,就是整个图片只用黑色和白色表示,一个灰阶图片,全部的颜色只有256种(0~255),若大于128,则用黑色表示RGB(255,255,255),若小于128,则用白色表示RGB(0,0,0),主要是方便做影像辨识。
1
<%@ Page Language="C#" %>
2
3
<%@ Import Namespace="System.Drawing" %>
4
<%@ Import Namespace="System.Drawing.Imaging" %>
5
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
7
<script runat="server">
8
9
protected void Page_Load(object sender, EventArgs e) {
10
// Bitmap uses System.Drawing namespace.
11
Bitmap bmpOld = new Bitmap(Server.MapPath("lena.bmp"));
12
13
// Size the new bitmap to source bitmap's dimension.
14
Bitmap bmpNew = new Bitmap(bmpOld.Width, bmpOld.Height);
15
16
Graphics canvas = Graphics.FromImage(bmpNew);
17
18
// Draw the old bitmap's content to the new bitmap.
19
// Paint the entire region of old bitmap to the new bitmap.
20
// Use the rectangle type to select area of source image.
21
canvas.DrawImage(bmpOld, new Rectangle(0, 0, bmpNew.Width, bmpNew.Height), 0, 0, bmpOld.Width, bmpOld.Height, GraphicsUnit.Pixel);
22
23
bmpOld = bmpNew;
24
25
int gray = 0;
26
27
for(int x=0;x < bmpOld.Width;x++) {
28
for (int y = 0; y < bmpOld.Height; y++) {
29
gray = bmpOld.GetPixel(x, y).R;
30
gray += bmpOld.GetPixel(x, y).G;
31
gray += bmpOld.GetPixel(x,y).B;
32
33
gray /= 3;
34
35
if (gray >= 128) {
36
bmpOld.SetPixel(x,y,Color.FromArgb(255,255,255));
37
}
38
else {
39
bmpOld.SetPixel(x,y,Color.FromArgb(0,0,0));
40
}
41
}
42
}
43
44
Response.ContentType = "image/bmp";
45
46
// ImageFormat uses System.Drawing.Imaging namespace.
47
// Must use ImageFormat.Jpeg. If use ImageFormat.Bmp,
48
// you'll get "System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+." error.
49
bmpOld.Save(Response.OutputStream, ImageFormat.Jpeg);
50
51
// You should always call the Dispose method to release
52
// the Graphics and related resources created by the
53
// FromImage method.
54
bmpNew.Dispose();
55
bmpOld.Dispose();
canvas.Dispose();
56
57
}
58
</script>
59
60
<html xmlns="http://www.w3.org/1999/xhtml">
61
<head runat="server">
62
<title>Untitled Page</title>
63
</head>
64
<body>
65
<form id="form1" runat="server">
66
<div>
67
</div>
68
</form>
69
</body>
70
</html>
71
<%@ Page Language="C#" %>2

3
<%@ Import Namespace="System.Drawing" %>4
<%@ Import Namespace="System.Drawing.Imaging" %>5
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">6

7
<script runat="server">8

9
protected void Page_Load(object sender, EventArgs e) {10
// Bitmap uses System.Drawing namespace.11
Bitmap bmpOld = new Bitmap(Server.MapPath("lena.bmp"));12

13
// Size the new bitmap to source bitmap's dimension.14
Bitmap bmpNew = new Bitmap(bmpOld.Width, bmpOld.Height);15

16
Graphics canvas = Graphics.FromImage(bmpNew);17

18
// Draw the old bitmap's content to the new bitmap.19
// Paint the entire region of old bitmap to the new bitmap.20
// Use the rectangle type to select area of source image.21
canvas.DrawImage(bmpOld, new Rectangle(0, 0, bmpNew.Width, bmpNew.Height), 0, 0, bmpOld.Width, bmpOld.Height, GraphicsUnit.Pixel);22

23
bmpOld = bmpNew;24
25
int gray = 0;26
27
for(int x=0;x < bmpOld.Width;x++) {28
for (int y = 0; y < bmpOld.Height; y++) {29
gray = bmpOld.GetPixel(x, y).R;30
gray += bmpOld.GetPixel(x, y).G;31
gray += bmpOld.GetPixel(x,y).B;32
33
gray /= 3;34
35
if (gray >= 128) {36
bmpOld.SetPixel(x,y,Color.FromArgb(255,255,255));37
}38
else {39
bmpOld.SetPixel(x,y,Color.FromArgb(0,0,0));40
}41
}42
}43
44
Response.ContentType = "image/bmp";45

46
// ImageFormat uses System.Drawing.Imaging namespace.47
// Must use ImageFormat.Jpeg. If use ImageFormat.Bmp,48
// you'll get "System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+." error.49
bmpOld.Save(Response.OutputStream, ImageFormat.Jpeg);50

51
// You should always call the Dispose method to release 52
// the Graphics and related resources created by the 53
// FromImage method.54
bmpNew.Dispose();55
bmpOld.Dispose();canvas.Dispose();
56

57
}58
</script>59

60
<html xmlns="http://www.w3.org/1999/xhtml">61
<head runat="server">62
<title>Untitled Page</title>63
</head>64
<body>65
<form id="form1" runat="server">66
<div>67
</div>68
</form>69
</body>70
</html>71

See Also
(原創) 如何實現Real Time的Binary Image? (SOC) (Verilog) (Image Processing) (DE2-70) (TRDB-D5M)


protected
浙公网安备 33010602011771号