首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何在DBImage中加载JPG图片? [已结贴,结贴人:lxp945]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lxp945
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2007-03-18 22:01:34 楼主
    如何用OpenPictrueDailog在DBImage中打开JPG图片并保存到数据库?
    40  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • joyous
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-18 22:14:451楼 得分:15
    ADO   组件,简单的写了一下,其实这类问题已经在论坛被问了很多次,搜索一下已经
    结了的帖子就知道

    //   二进制写表
    //   ---------------------------------------

    AnsiString   filename   =   " ";

    if   (   OpenDialog1-> Execute()   )
    {
        filename   =   OpenDialog1-> FileName;

        if   (   FileExists   (   filename   )   ==   false)
              return;
    }
    else
    {
        return;
    }

    TMemoryStream*   pMS   =   new   TMemoryStream;
    pMS-> LoadFromFile(FileName);   //   文件读入内存流

    pMS-> Seek(0,soFromBeginning);

    ADOQuery1-> SQL-> Clear();
    ADOQuery1-> SQL-> Add( "insert   into   imagetab   (title,   image)   values   (:title,   :image); ");
    ADOQuery1-> Parameters-> ParamByName( "title ")-> Value   =   Edit1-> Text;
    ADOQuery1-> Parameters-> ParamByName( "image ")-> LoadFromStream(pMS,   ftBlob);
    ADOQuery1-> ExecSQL();

    //   ---------------------------------------

    //   二进制读取,相关的操作你自己写了

    TMemoryStream*   pMS   =   new   TMemoryStream;

    TBlobField*   pField   =   (TBlobField*)   ADOQuery2-> FieldByName( "image ");

    pMS-> Seek(0,soFromBeginning);
    pMS-> Size   =   0;

    pField-> SaveToStream(pMS);

    pMS-> SaveToFile( "newfile ");

    ADOQuery2-> Close();

    delete   pMS;
    pMS   =   NULL;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lxp945
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-18 23:33:572楼 得分:0
    谢谢你的帮助,但我引用你的代码后执行时当打开JPG的图片里仍然报错:Bitmap   image   is   not   valid ",代码如下:void   __fastcall   TForm1::Button11Click(TObject   *Sender)
    {
    AnsiString   filename   =   " ";

    if   (   OpenDialog1-> Execute()   )
    {
        filename   =   OpenDialog1-> FileName;

        if   (   FileExists   (   filename   )   ==   false)
              return;
    }
    else
    {
        return;
    }

    TMemoryStream*   pMS   =   new   TMemoryStream;
    pMS-> LoadFromFile(filename);pMS-> Seek(0,soFromBeginning);

    ADOQuery1-> SQL-> Clear();
    ADOQuery1-> SQL-> Add( "update   part   set   photo=:image; ");
    ADOQuery1-> Parameters-> ParamByName( "image ")-> LoadFromStream(pMS,   ftBlob);
    ADOQuery1-> ExecSQL();
    }
    请问哪里出错了,麻烦说明白点,我很菜
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • joyous
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-18 23:40:083楼 得分:0
    Bitmap   image   is   not   valid.
    你用的控件不支持JPG,只支持Bitmap类型
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • joyous
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-18 23:48:334楼 得分:0
    还有就是   Button11Click   内的代码不应该会引起这个错误

    刚才看了一下   Help,DBImage   可能支持   Bitmap   不支持JPG
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • joyous
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-18 23:53:015楼 得分:0
    刚才看了一下   Help,DBImage   只支持   Bitmap   ,而不支持JPG

    如果非要JPG,你可以在表的游标移动事件发生后将图片字段读出,放到目录内,由   TImage   控件直接往目录内载入
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lxp945
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-18 23:55:446楼 得分:0
    那请问哪里有支持JPG的DBImage控件下载?谢谢了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lxp945
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-18 23:59:487楼 得分:0
    我的是浏览到记录时,在DBImage中就显示产品的图片,图片有BMP的,也有JPG,GIF的。

    “如果非要JPG,你可以在表的游标移动事件发生后将图片字段读出,放到目录内,由   TImage   控件直接往目录内载入”

    能不能给出实现代码?:)谢谢你的帮助
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • joyous
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-19 00:18:108楼 得分:0
    大体流程就是上面说的,部分代码你可以参考上面给出的代码,自己写写了,很简单的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • joyous
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-19 11:19:449楼 得分:0
    Table   或者   Query   的   AfterScroll   事件就是游标移动后的所产生的事件,再添加上面部分代码就实现所需功能了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ccrun
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 12

      7

    发表于:2007-03-19 11:46:3410楼 得分:25
    #include   <Jpeg.hpp>

    将DBImage1的属性AutoDisplay设为false,在DBImage1对应的Table或者Query控件的事件AfterScroll里写代码:

    void   __fastcall   TForm1::Table1AfterScroll(TDataSet   *DataSet)
    {
            TMemoryStream   *ms   =   DBImage1-> DataSource-> DataSet
                    -> CreateBlobStream(DBImage1-> DataSource->
                    DataSet-> FieldByName(DBImage1-> DataField),
                    bmRead);
            TJPEGImage*   Jpeg   =   new   TJPEGImage;
            Jpeg-> LoadFromStream(ms);
            DBImage1-> Picture-> Bitmap-> Assign(Jpeg);
            delete   ms;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • huzhangyou
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-19 11:54:0511楼 得分:0
    同意joyous的说法
    可以以流的方式存除blob
    显示的时候   不一定要用DBImage
    可以直接使用Image
    画上去就可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • joyous
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-19 12:17:1312楼 得分:0
    不过   老妖   的方法也可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wewaa
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-19 13:50:2013楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lxp945
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-03-19 17:51:3714楼 得分:0
    我用老妖的方法编译是报错:[C++   Error]   Unit1.cpp(29):   E2034   Cannot   convert   'TStream   * '   to   'TMemoryStream   * '

    我的全部代码如下:
    #include   <vcl.h>
    #pragma   hdrstop
    #include   <Jpeg.hpp>

    #include   "Unit1.h "
    //---------------------------------------------------------------------------
    #pragma   package(smart_init)
    #pragma   resource   "*.dfm "
    TForm1   *Form1;
    //---------------------------------------------------------------------------
    __fastcall   TForm1::TForm1(TComponent*   Owner)
                    :   TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------

    void   __fastcall   TForm1::BitBtn1Click(TObject   *Sender)
    {
    if(OpenPictureDialog1-> Execute())
    {DBImage1-> Picture-> LoadFromFile(OpenPictureDialog1-> FileName);
    }
    }
    //---------------------------------------------------------------------------

    void   __fastcall   TForm1::ADOQuery1AfterScroll(TDataSet   *DataSet)
    {
            TMemoryStream   *ms   =   DBImage1-> DataSource-> DataSet-> CreateBlobStream(DBImage1-> DataSource-> DataSet-> FieldByName(DBImage1-> DataField),bmRead);
            TJPEGImage   *Jpeg   =   new   TJPEGImage;
            Jpeg-> LoadFromStream(ms);
            DBImage1-> Picture-> Bitmap-> Assign(Jpeg);
            delete   ms;
    }
    //---------------------------------------------------------------------------
    请问该如何改?谢谢各位的帮助
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • river0001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-04-08 12:47:2615楼 得分:0
    翻了这么多类似问题的帖子,大家都搞得很麻烦,其实只要加上
    #include  <Jpeg.hpp>

    TDBImage就可以支持jpg了!!!

    就这么简单!!!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved