前段时间,Accounting 项目内需要在水晶报表中动态显示任意格式的图片。但是,水晶报表只支持OleDb的静态加载图片和动态在 IFieldObject中显示图片,显然,静态加载是不行的了,而后者仅支持JPEG和BMP格式的图片。因此,我们需要把任意格式的图片预先转换成受支持的JEPG或BMP格式,再填充到DataSet中,然后动态地推入到水晶报表中。
下面的示例中将讲述如何将一个给定路径或从其它途径得到的一个图片流转换成JPEG格式并返回成一个字节数组,以提供给后续应用:




























































































下面是应用上面代码的一个示例(非完整):
1
private void Form7_Load(object sender, System.EventArgs e)
2
{
3
string[] etc = new string[]
{"jpg", "gif", "bmp", "tif", "png"};
4
string path = @"C:\Documents and Settings\sh12\My Documents\My Pictures\NeweggLogo.";
5
try
6
{
7
byte[] myImage = null;
8
9
Dataset2 ds = new Dataset2();
10
DataRow drNew = null;
11
for(int i=0; i<etc.Length; i++)
12
{
13
myImage = Newegg.Common.ImageUtil.ReadImage(path + etc);
14
15
drNew = ds.MyTable.NewRow();
16
drNew["ImageType"] = etc;
17
drNew["ImageData"] = myImage;
18
ds.MyTable.Rows.Add(drNew);
19
}
20
21
myImage = Newegg.Common.ImageUtil.ReadImage(@"C:\Documents and Settings\sh12\My Documents\My Pictures\untitled.JPG");
22
drNew = ds.MyTable.NewRow();
23
drNew["ImageType"] = "untitled.JPG";
24
drNew["ImageData"] = myImage;
25
ds.MyTable.Rows.Add(drNew);
26
27
ds.AcceptChanges();
28
29
CrystalReport1 rpt = new CrystalReport1();
30
rpt.SetDataSource(ds);
31
this.crystalReportViewer1.ReportSource = rpt;
32
}
33
catch(Exception ex)
34
{
35
MessageBox.Show(ex.Message);
36
}
37
}

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

其实这个实现非常简单,思路也容量想到。只是,还是希望能够给大家提供一些帮助或启迪了。
谢谢大家的阅读!
请指正!
来源:https://www.cnblogs.com/oosnoopy/archive/2005/12/17/299022.html