怎么将图片转换成二进制,存入数据库,然后怎么读出来并显示

怎么将图片转换成二进制,存入数据库,然后怎么读出来并显示,第1张

1将Image图像文件存入到数据库

我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中

要这里有关数据的 *** 作略写,我将一些代码段写成方法,方便直接调用

//根据文件名(完全路径)

public byte[] SetImageToByteArray(string fileName)

{

FileStream fs = new FileStream(fileName, FileModeOpen);

int streamLength = (int)fsLength;

byte[] image = new byte[streamLength];

fsRead(image, 0, streamLength);

fsClose();

return image;

}

//另外,在ASPNET中通过FileUpload控件得到的图像文件可以通过以下方法

public byte[] SetImageToByteArray(FileUpload FileUpload1)

{

Stream stream = FileUpload1PostedFileInputStream;

byte[] photo = new byte[FileUpload1PostedFileContentLength];

streamRead(photo, 0, FileUpload1PostedFileContentLength);

streamClose();

return photo;

}

2从SQL Server数据库读取Image类型的数据,并转换成bytes[]或Image图像文件

//要使用SqlDataReader要加载using SystemDataSqlClient命名空间

//将数据库中的Image类型转换成byte[]

public byte[] SetImage(SqlDataReader reader)

{

return (byte[])reader["Image"];//Image为数据库中存放Image类型字段

}

//将byte[]转换成Image图像类型

//加载以下命名空间using SystemDrawing;/using SystemIO;

using SystemDataSqlClient;/

public Image SetByteToImage(byte[] mybyte)

{

Image image;

MemoryStream mymemorystream = new MemoryStream(mybyte,0, mybyteLength);

image = ImageFromStream(mymemorystream);

return image;

}

用ADO方式连的MYSQL, 已经用AppendChunk以二进制插入数据库中,下面是读取的不分,写入相反的方式

void DatabaseFile::GetImage()

{

_RecordsetPtr pRs = NULL;

pRsCreateInstance(__uuidof(Recordset));

_variant_t varChunk;

_variant_t varBLOB;

try

{

CString sql = "select image from visdata where DetectTime = '2008-06-19 11:23:44';";

//Open a Recordset

HRESULT hr = pRs->Open(_variant_t("select from visdata;"),_variant_t((IDispatch ) m_pConnection,true),adOpenKeyset,adLockOptimistic,adCmdText);

//read data

long lDataLength = pRs->Fields->GetItem("image")->ActualSize;//数据长度可以正确获取

varBLOB = pRs->GetFields()->GetItem("image")->GetChunk(lDataLength);

if(varBLOBvt == (VT_ARRAY | VT_UI1))

{

BYTE pBuf = NULL;

pBuf = (BYTE)GlobalAlloc(GMEM_FIXED,lDataLength);//分配空间

hr = SafeArrayAccessData(varBLOBparray,(void )&pBuf);

if (FAILED(hr))

return;

//Build a File

char tmpPath[_MAX_PATH+1];

GetCurrentDirectory( MAX_PATH,tmpPath);

CString strFileName = "\\temp2bmp";//输出的文件名

strFileName = tmpPath+strFileName;

CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary );

/要判断文件是否创建成功/

LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)(pBuf));

outFileWriteHuge(buffer,lDataLength);

GlobalUnlock((HGLOBAL)pBuf);

outFileClose();

SafeArrayUnaccessData (varBLOBparray);

}

pRs->Close();

}

C#保存

Filter="jpg|JPG|GIF|GIF|BMP|BMP";if(ShowDialog()==OK){

stringfullpath=FileName;//文件路径FileStreamfs=newFileStream(fullpath,FileModeOpen);byte[]imagebytes=newbyte[fsLength];br=new(fs);

imagebytes=brReadBytes(ConvertToInt32(fsLength));//打开数据库

con=new

("server=(local);uid=sa;pwd=;database=test");conOpen();

SqlCommandcom=newSqlCommand("insertintotb_08values(@ImageList)",con);

comParametersAdd("ImageList",SqlDbTypeImage);comParameters["ImageList"]Value=imagebytes;com();conClose();

以上就是关于怎么将图片转换成二进制,存入数据库,然后怎么读出来并显示全部的内容,包括:怎么将图片转换成二进制,存入数据库,然后怎么读出来并显示、如何用ado将二进制图片数据存入mysql数据库、SQL数据库二进制数如何转换(sql数据库二进制数据显示)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9507794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存