如何把图像数据存到Image字段中

Benjamin_Hua 2004-11-10 11:37:43
如何把图像数据存到Image字段中


我用Delphip写了以下代码来存取图像

procedure TForm1.BitBtn1Click(Sender: TObject);
var
Image :String;

begin
IF OpenDialog1.Execute THEN
BEGIN
Image:=OpenDialog1.FileName;
Label1.Caption:=Image;
ImageName:=Image;
Image1.Picture.LoadFromFile(Image); /////////取数据
END
else
ImageName:='';
end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin
if Image1.Picture.Graphic<>nil then
begin


Table1.Active:=true;

table1.Insert;
////////////////////////////////////////
table1.fieldbyname('ImageName').asstring:='bmp1';
Table1.Fields[1].Assign(Image1.Picture.Graphic); //////存数数。
table1.post;
Table1.Close;
/////////////////////////////////////


可以运行,提交数据的时候出现以下例外错误提示:
**************************************************************
================ Invalid BLOB length ==================
***************************************************************
请高手出手相助!


...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lieo123 2004-11-24
  • 打赏
  • 举报
回复
//m_pic是自己的图象类的一个对象
CFile f;
CString FilePathName;
CFileException e;

CFileDialog dlg(TRUE,NULL,NULL,0,"jpg Files (*.jpg)|*.jpg||",this);///TRUE为OPEN对话框,FALSE为SAVE AS对话框
if(dlg.DoModal()==IDOK)
{
FilePathName=dlg.GetPathName();
if(m_Pic.m_IPicture != NULL) m_Pic.FreePictureData(); // Important - Avoid Leaks...

if(f.Open(FilePathName, CFile::modeRead | CFile::typeBinary, &e)) //打开了一个jpg文件
{

int nSize = f.GetLength(); //先得到jpg文件长度
BYTE * pBuffer = new BYTE [nSize]; //按文件的大小在堆上申请一块内存

if (f.Read(pBuffer, nSize) > 0 ) //把jpg文件读到pBuffer(堆上申请一块内存)
{ // +----------------------------------------------
BYTE *pBuf = pBuffer; ///下面这一大段是把pBuffer里的jpg数据放到库中
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];

if(!m_pRecordset->Supports(adAddNew))return;
m_pRecordset->AddNew();

if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)nSize; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("image")->AppendChunk(varBLOB);
}
m_pRecordset->Update();

// +----------------------------------------------


(m_Pic.LoadPictureData(pBuffer, nSize));//接作调用函数读pBuffer的jpg数据准备显示
delete [] pBuffer; //删掉堆上申请的那一块内存
pBuf=0; //以防二次乱用
}
f.Close();
AfxMessageBox("添加成功!");
}

}
Selectau_fname 2004-11-16
  • 打赏
  • 举报
回复
up
mediafang2003 2004-11-16
  • 打赏
  • 举报
回复
用流处理啊
victer 2004-11-16
  • 打赏
  • 举报
回复
帮你顶!

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧