经由过程Remobject组件存储图片

办事端:TROBinMessage,TROIndyHTTPServer

         供给办事接口:    

IBinaryMidService = interface

            [""{51904085-6D27-4EDA-A55D-A9EE21686894}""]

               function Add(Const ANum:AnsiString; const AType: AnsiString; const AValue: Binary): Integer;

end;

   客户端:TROBinMessage,TROWinInetHTTPChannel,TRORemoteService

   数据库:Oracle10,图片字段类型为BLOB

简单介绍:客户端把图片读入到流中并经由过程IBinaryMidService办事传输到办事器,然后有办事器存入到数据库中.

一:客户端生成流畅过办事传输到办事器

1 procedure SavePic;
 2 var
 3   tmpStream:TROBinaryMemoryStream;
 4   VBinaryMidService:IBinaryMidService;
 5 begin
 6   tmpStream:=TROBinaryMemoryStream.Create;
 7   VBinaryMidService:=TBinaryMidService_Proxy.Create(ROMessage,ROChannel);
 8   Image1.Picture.Graphic.SaveToStream(tmpStream) ;

9   VBinaryMidService.Add(""0001"",PicType,tmpStream);
10 end;

二:办事端接管流增长到数据库

function TBinaryMidService.Add(Const ANum: AnsiString; const AType: AnsiString; const AValue: Binary): Integer;
var
   tmpSQLStr:string;
begin
   tmpSQLStr:=format("" into test(num,AType,pic) values (%s,%s,:0)"",[quotedstr(ANum),quotedstr(AType)]);
   DBOrder.AddPic(tmpSQLStr,AValue);
end;

//--------------ucDBOrder----------------------
function DBOrder.AddPic(ASQLStr:string;AValue)
var
    QryTDB:TADOQuery;
begin
    QryTDB:= TADOQuery.Create(nil);
    QryTDB.Close;
    QryTDB.SQL.Clear; 
    QryTDB.Connection:=Conn;
    QryTDB.SQL.Add(SQLStr);
    QryTDB.Parameters.ParamByName(""1"").LoadFromStream(AValue,ftBlob);
    QryTDB.SQL;
    FreeAndNil(QryTDB);
end;

三:客户端获得数据并显示图片

1 procedure showPic;
 2 var
 3   Data:Variant;
 4   VBinaryMidService:IBinaryMidService;
 5   PicFile:TGraphic;
 6 begin  
 7   //获得数据赋值给
 8   VBinaryMidService:=TBinaryMidService_Proxy.Create   (ROMessage,ROChannel);
 9   VBinaryMidService.GetPic(""00001"",Data);
10   ClientDataSet.Data:=Data;
11   //显示图片
12   if not ClientDataSet1.FieldByName(""Pic"").IsNull then
13   begin
14     if ClientDataSet1.FieldByName(""PicType"").AsString=""BMP"" then
15       //显示bmp文件
16       PicFile:=TBitmap.Create;
17     else
18     if ClientDataSet1.FieldByName(""PicType"").AsString=""JPG"" then
19     begin
20       //显示JPG文件
21       PicFile:=TJPEGImage.Create;
22     end else
23     if ClientDataSet1.FieldByName(""PicType"").AsString=""ICO"" then
24     begin
25       //显示ICO文件
26       //IcoFile:=TIcon.Create;    //      IcoFile.Free;
27       PicFile:=TIcon.Create;
28     end else
29     if ClientDataSet1.FieldByName(""PicType"").AsString=""PNG"" then
30     begin
31       //显示PNG文件
32       PicFile:=TPNGObject.Create;
33     end else
34     if ClientDataSet1.FieldByName(""PicType"").AsString=""GIF"" then
35     begin
36       //显示PNG文件
37       PicFile:=TGIFImage.Create;
38     end;
39    mStream:=TMemoryStream.Create ;
40    TBlobField(ClientDataSet1.FieldByName(""Pic"")).SaveToStream(mStream);
41     mStream.Position :=0;
42     PicFile.LoadFromStream(MStream);
43
44    image1.Picture.Assign(PicFile);
45     PicFile.Free; 
46     mStream.Free;
47 end;
48 end;

时间: 2024-09-29 09:19:20

经由过程Remobject组件存储图片的相关文章

SQL 2008存储图片和SQL 2008读取图片

用SQL Server存储文字数据很容易实现,如果用SQL Server存储图片呢?大家有没有实现思路呢?现在我用一个Demo来为大家提供一种在SQL Server中存储图片的思路. 场景:在superPhoto文件夹中,有三位NBA超级巨星的图片需要存储在数据库中,他们分别是保罗.罗斯和德隆,文件内容如下: 有了需求,下面讲实现.实现过程分为3个步骤. 步骤1:我们需要在数据库test中建立T_superStar表,并向表中插入三位球星的信息. create table T_superStar

在数据库中 存储图片 以及 在界面中显示图片(存储图片路径)- 这种方法相对与存储二进制文件好

花了一下午时间,终于学会了在数据库中存储图片,以及在界面中显示图片了. 存储图片有两种方法: 一种是:直接把图片转换成二进制文件存储在数据库中. 一种是:存储图片的路径到数据库,用的时候直接调用路径给image等图像控件即可. 两种方法,有利有弊,第一种方法适合存储量少且重要的图片信息.第二种方法适合存储量大但不是太重要的图片. 我使用的是第二种方法,简单,实用. 下面就是我具体的实现过程: 首先我新建了两个网页文件,insert_photo.aspx / select_photo.apsx 第

安卓图片的异步请求及使用LruCache缓存和手机内存两层存储图片,避免重新加载页面带来的重新请求

看到网友的一片技术博客讲解了LruCache的使用,我把它加到了我的项目中,但是加入断点发现,列表上下滑动时,确实可以不用重新加载图片,但是重新打开这个activity或者重新启动应用,LruCache的缓存都不再存在,而需要重新联网下载,所有我对这个方法加以改进,加入了一层往手机内存存储图片的过程. 这样的话,使用图片时,先从LruCache中加载,如果LruCache中不存在该图片资源的话,再从手机存储中进行加载,如果同样不存在,则先显示一个默认图片. 另一方面,我的项目使用图片的是list

Redis 存储图片 [base64/url/path]vs[object]

一.base64图片编解码 基本流程:从网络获取下载一张图片,然后base64编码,再base64解码,存到本地E盘根目录下. import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLE

解决Windows 组件存储已损坏,0x80073712错误

在 Windows 8 与 Windows Server 2012,当系统组件有损毁时,我们可以在不影响目前系统状况下来检查与修复系统组件.如下,当我添加功能组件时报如下错误,明显可以看出我的组件存储已损坏. 那今天就让我告诉大家解决方案,我们可以使用DSIM命令来解决如上问题.一条命令就可以搞定,通过这条命令是把那些不同的系统文件还原成官方系统源文件,其他的第三方软件和用户设置完全保留,比重装那是好多了,但比较耗时噢.而且在扫描与修复的时候系统未损坏部分正常运行,电脑可以照常工作,没有宕机时间

使用WIC组件转换图片格式

#include <windows.h>#include <Wincodec.h>#pragma comment(lib, "Windowscodecs.lib" )HRESULT PNG2WDP(WCHAR* szPngFileName, WCHAR* szWdpFileName){    IWICImagingFactory *piFactory = NULL;    IWICBitmapEncoder *piEncoder = NULL;    IWICB

android 存储图片到data目录和读取data目录下的图片

public void storePic(String tabid, String key, Bitmap bitmap) { LogUtils.LOGD(TAG, "storePic begin tabid = " + tabid + "key = " + key); FileOutputStream fos = null; try { fos = getActivity().openFileOutput(tabid + "_" + key,

Java利用Eclipse和Mysql数据库连接并存储图片——取出图片

通过流和JPEGCodec.JPEGImageEncoder类的操作来取出数据库中的图片. 注释很详细,注意要额外的引入mysql的驱动包,要修改数据库的用户名和密码以及URL.希望对大家有帮助. import java.awt.image.BufferedImage; import java.io.*; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql

Java利用Eclipse和Mysql数据库连接并存储图片——存储图片

import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class insertImage {  public static void main(String[]args) throws Ex