C#怎样读取数据库中Image类型?在线等!!
C#怎样读取数据库中Image类型(二进制数据),读取之后显示到textarea控件中!!!注释:image类型这一列中存放的有word、excel,系统公告的数据。存是...
C#怎样读取数据库中Image类型(二进制数据),读取之后显示到textarea控件中!!!
注释:image类型这一列中存放的有word、excel,系统公告的数据。
存是存进去了,但是怎么取出来啊?大侠求救。。。。。。
自己搞定了,采用了一种非常简单的方法,没这么复杂 展开
注释:image类型这一列中存放的有word、excel,系统公告的数据。
存是存进去了,但是怎么取出来啊?大侠求救。。。。。。
自己搞定了,采用了一种非常简单的方法,没这么复杂 展开
4个回答
展开全部
存进去了就可以用流文件读出来 然后绘制到屏幕上.
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类型图片的绘制,你可以看下
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类型图片的绘制,你可以看下
展开全部
图片建议还是使用保存路径 名称的方式比较好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为存进去的是二进制文件啊,所以先把
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();
}
以上是数据不大的时候用的简单方法,如果数据比较大可能就要用到缓冲啦!
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();
}
以上是数据不大的时候用的简单方法,如果数据比较大可能就要用到缓冲啦!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你怎么存进去的?我只知道显示照片的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询