C#怎样读取数据库中Image类型?在线等!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#怎样读取数据库中Image类型?在线等!!相关的知识,希望对你有一定的参考价值。

C#怎样读取数据库中Image类型(二进制数据),读取之后显示到textarea控件中!!!

注释:image类型这一列中存放的有word、excel,系统公告的数据。

存是存进去了,但是怎么取出来啊?大侠求救。。。。。。
自己搞定了,采用了一种非常简单的方法,没这么复杂

存进去了就可以用流文件读出来 然后绘制到屏幕上.
class MyBitmap

private int width;//位图的宽

public int Width

get return width;
set width = value;


private int height;//位图的高

public int Height

get return height;
set height = value;


private int postColor;//颜色深度

public int PostColor

get return postColor;
set postColor = value;


private Bitmap mBitmap;//位图内置对象,引用系统内置Bitmap

public Bitmap MBitmap

get return mBitmap;
set mBitmap = value;


/// <summary>
/// 构造方法,构造一个Bitmap类
/// </summary>
/// <param name="fileurl">文件路径,包含文件名.</param>
public MyBitmap(string fileurl)

FileStream fs = new FileStream(fileurl, FileMode.Open);//引用文件操作流
fs.Seek(18, 0);//将流的初始值设为19,即跳过18位.
int wbmp1 = fs.ReadByte();//读取宽的第一位
int wbmp2 = fs.ReadByte();//读取宽的第二位
int wbmp3 = fs.ReadByte();//读取宽的第三位
fs.ReadByte();//第四位在这里用不到.
int hbmp1 = fs.ReadByte();//读取高的第一位
int hbmp2 = fs.ReadByte();//读取高的第二位
int hbmp3 = fs.ReadByte();//读取高的第三位,第四位依然用不到.
Width = wbmp1 | wbmp2 << 8 | wbmp3 << 16;//位移运算.得到三个位组成的一个int类型的变量,即位图的宽.
Height = hbmp1 | hbmp2 << 8 | hbmp3 << 16;//位移运算.得到三个位组成的一个int类型的变量,即位图的高.
//取得颜色深度,即为多少位的图.在文件头的29位.
fs.Seek(28, 0);//跳过28位.
postColor = fs.ReadByte();//读取第29位,即颜色深度.
MBitmap = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);//实例化Bitmap类
fs.Seek(54, 0);//跳过文件头,即从第55位开始.
for (int Ycount = 0; Ycount < MBitmap.Height; Ycount++)//双层循环,遍历bmp数组,分别调用SetPixel方法

for (int Xcount = 0; Xcount < MBitmap.Width; Xcount++)

int a = fs.ReadByte();
int b = fs.ReadByte();
int c = fs.ReadByte();
int color = a | b << 8 | c << 16;
//因为行序是颠倒的,所以要让它倒回来,需要用行高减去它当前的行数再减一,防止越界.
MBitmap.SetPixel(Xcount, MBitmap.Height - Ycount - 1, Color.FromArgb(color));


fs.Close();//关闭文件流


/// <summary>
/// 绘制位图
/// </summary>
/// <param name="g">Graphics对象g</param>
public void Draw(Graphics g,Bitmap bmp)

g.DrawImage(bmp, 0, 0);//绘制bmp图


public Bitmap SmallBitmap(Bitmap b)

int w = b.Width / 2;
int h = b.Height / 2;
Bitmap bmp = new Bitmap(b, w, h);
for (int Ycount = 0; Ycount < h; Ycount++)

for (int Xcount = 0; Xcount < w; Xcount++)

Color c1 = b.GetPixel(Xcount * 2, Ycount * 2);
Color c2 = b.GetPixel(Xcount * 2, Ycount * 2 + 1);
Color c3 = b.GetPixel(Xcount * 2 + 1, Ycount * 2);
Color c4 = b.GetPixel(Xcount * 2 + 1, Ycount * 2 + 1);
int c1r = (16711680 & c1.ToArgb()) >> 16;
int c1g = (65280 & c1.ToArgb()) >> 8;
int c1b = (255 & c1.ToArgb());

int c2r = (16711680 & c2.ToArgb()) >> 16;
int c2g = (65280 & c2.ToArgb()) >> 8;
int c2b = (255 & c2.ToArgb());

int c3r = (16711680 & c3.ToArgb()) >> 16;
int c3g = (65280 & c3.ToArgb()) >> 8;
int c3b = (255 & c3.ToArgb());

int c4r = (16711680 & c4.ToArgb()) >> 16;
int c4g = (65280 & c4.ToArgb()) >> 8;
int c4b = (255 & c4.ToArgb());

int cr = (c1r + c2r + c3r + c4r) / 4;
int cg = (c1g + c2g + c3g + c4g) / 4;
int cb = (c1b + c2b + c3b + c4b) / 4;

bmp.SetPixel(Xcount, Ycount, Color.FromArgb((cr == 255 && cg == 0 && cb == 255) ? 0 : 255, cr, cg, cb));


return bmp;



这里有一段我写的对bmp类型图片的绘制,你可以看下
参考技术A 图片建议还是使用保存路径 名称的方式比较好。 参考技术B 因为存进去的是二进制文件啊,所以先把
byte[] pics1 = (byte[])domainTd.Rows[某行][某列]的值强制转换;
然后把二进制数据,和原来的文件类型及文件名丢到方法处理!
public void writefile(byte[] pics,string filename)

FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(pics, 0, pics.Length);
bw.Close();
fs.Close();

以上是数据不大的时候用的简单方法,如果数据比较大可能就要用到缓冲啦!本回答被提问者和网友采纳
参考技术C 你怎么存进去的?我只知道显示照片的

如何通过c#读取oracle数据库中的long类型字段

我遇到一个问题,如何通过c#读取oracle数据库中的long类型字段,我现在读取直接显示是\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052\fonttbl\f0\fmodern\fprq1\fcharset134 \'b7\'c2\'cb\'ce_GB2312;\f1\froman\fprq2\fcharset0 Times New Roman;\f2\fnil\fcharset134 \'cb\'ce\'cc\'e5;
\viewkind4\uc1\pard\nowidctlpar\fi560\sl-600\slmult0\qj\kerning2\f0\fs28\'d7\'ea\'be\'ae\'b9\'a4\'b3\'cc\'bc\'bc\'ca\'f5\'b9\'ab\'cb\'be\'d7\'e9\'bd\'a8\'d3\'da\f1 1997\f0\'c4\'ea\f1 5\f0\'d4\'c2\'a3\'ac\'ca\'c7\'d2\'bb\'bc\'d2\'bc\'af\'d7\'ea\'be\'ae\'b8\'df\'d0\'c2

应该如何转换成正确的文字哪?拜托各位大侠了!
δCat 可以在描述详细些吗?谢谢了

这就是正确的内容, 只是,你存储的格式是 WORD 文件或 RTF文件吧

你可以用 byte[] 方式读取, 然后直接保存成文件
参考技术A 你是用的OracleDataAdapter da = new OracleDataAdapter(sql, conn);吗?那样好像直接取出来直接ToString()不正常吗?

以上是关于C#怎样读取数据库中Image类型?在线等!!的主要内容,如果未能解决你的问题,请参考以下文章

图片保存到数据库以及C#读取图片

使用 Linq 从在线 XML 文件中读取数据

c#中怎样读取xml文件中的数据,怎样动态将数据存储到xml文件中去?

C#怎样读取HTML文件

怎样使用java读取image

读取数据库中的image类型后的保存方式