(原創) 如何将图片转成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

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

canvas.Dispose();
56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

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