(原創) 如何用程序的方式载入indexd过的图形文件? (.NET) (ASP.NET) (C#) (GDI+) (Image Processing)
做过indexd的图形文件,如使用正常的方式读取(参阅:如何用程序的方式载入jpg图形文件?),会出现A Graphics object cannot be created from an image that has an indexed pixel format.的错误讯息,以下的程序将示范如何读取indexed图形文件。
Reference
Steven A. Smith, Rob Howard, The ASP Alliance, ASP.NET 开发手札, 上奇科技出版事业处
KingLeon, Watermark Website Images At Runtime , The Code Project
1
<!-- (C) OOMusou 2006.09.30 oomusou@hotmail.com-->
2
<%@ Page Language="C#" %>
3![](/Images/OutliningIndicators/None.gif)
4
<%@ Import Namespace="System.Drawing" %>
5
<%@ Import Namespace="System.Drawing.Imaging" %>
6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
7![](/Images/OutliningIndicators/None.gif)
8
<script runat="server">
9
/// <summary>
10
/// .NET Framework 2.0 can't draw indexd pixel format directly.
11
/// and will get
12
/// "A Graphics object cannot be created from an image that "
13
/// has an indexed pixel format." exception.
14
/// So we have to make a temporary bitmap, and manually draw
15
/// indexed pixel format to general bitmap.
16
/// exception. This example demos how to read indexd pixel format.
17
/// </summary>
18
protected void Page_Load(object sender, EventArgs e) {
19
// Bitmap uses System.Drawing namespace.
20
Bitmap bmp = new Bitmap(Server.MapPath("lena.bmp"));
21
22
// Size the new bitmap to source bitmap's dimension.
23
Bitmap _bmp = new Bitmap(bmp.Width, bmp.Height);
24![](/Images/OutliningIndicators/InBlock.gif)
25
// Uses temp _bmp to write on canvas.
26
Graphics canvas = Graphics.FromImage(_bmp);
27![](/Images/OutliningIndicators/InBlock.gif)
28
// Draw the original indexed bitmap's content to the temp _bmp.
29
// Paint the entire region of original bitmap to the temp _bmp.
30
// Use the rectangle type to select area of source image.
31
canvas.DrawImage(bmp, new Rectangle(0, 0, _bmp.Width, _bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel);
32![](/Images/OutliningIndicators/InBlock.gif)
33
// Make temp _bmp to general bmp.
34
bmp = _bmp;
35![](/Images/OutliningIndicators/InBlock.gif)
36
// Specify HTML's content type.
37
Response.Clear();
38
Response.ContentType = "image/bmp";
39![](/Images/OutliningIndicators/InBlock.gif)
40
// ImageFormat uses System.Drawing.Imaging namespace.
41
// Must use ImageFormat.Jpeg. If use ImageFormat.Bmp,
42
// you'll get "System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+." error.
43
bmp.Save(Response.OutputStream,ImageFormat.Jpeg);
44![](/Images/OutliningIndicators/InBlock.gif)
45
// You should always call the Dispose method to release
46
// the Graphics and related resources created by the
47
// FromImage method.
48
_bmp.Dispose();
49
bmp.Dispose();
50
canvas.Dispose();
51
}
52
</script>
53![](/Images/OutliningIndicators/None.gif)
54
<html xmlns="http://www.w3.org/1999/xhtml">
55
<head runat="server">
56
<title></title>
57
</head>
58
<body>
59
<form id="form1" runat="server">
60
<div>
61
</div>
62
</form>
63
</body>
64
</html>
65
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
5
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
52
![](/Images/OutliningIndicators/None.gif)
53
![](/Images/OutliningIndicators/None.gif)
54
![](/Images/OutliningIndicators/None.gif)
55
![](/Images/OutliningIndicators/None.gif)
56
![](/Images/OutliningIndicators/None.gif)
57
![](/Images/OutliningIndicators/None.gif)
58
![](/Images/OutliningIndicators/None.gif)
59
![](/Images/OutliningIndicators/None.gif)
60
![](/Images/OutliningIndicators/None.gif)
61
![](/Images/OutliningIndicators/None.gif)
62
![](/Images/OutliningIndicators/None.gif)
63
![](/Images/OutliningIndicators/None.gif)
64
![](/Images/OutliningIndicators/None.gif)
65
![](/Images/OutliningIndicators/None.gif)
Reference
Steven A. Smith, Rob Howard, The ASP Alliance, ASP.NET 开发手札, 上奇科技出版事业处
KingLeon, Watermark Website Images At Runtime , The Code Project