怎么样将一个文本和图片混合的文件中的图片流数据提取出来并且保存到一个图片文件中

biu 2002-05-29 03:26:02
写写
...全文
150 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sword1028 2002-05-29
  • 打赏
  • 举报
回复
必须要有格式的呀! 或者判断这个图片(开始)或者文件(结尾的)标志呀!

给你个例子吧!(下边的程序来自http://www.ccidnet.com/tech/guide/2000/10/12/58_1180.html)

function LoadThumb(filename:shortstring):TBitmap;

procedure BGR2RGB(var bmp:TBitmap);
var
x,y:integer; t:char; data:pchar;
begin
 for y:=bmp.Height-1 downto 0 do
 begin
  data:=bmp.ScanLine[y];
  for x:=0 to bmp.Width-1 do
  begin
  t:=data[x*3];
   data[x*3]:=data[x*3+2];
  data[x*3+2]:=t;
  end;
end;
end;

var
  fstream:Tfilestream; mstream:Tmemorystream;
  j,i:word;data:pchar; buf:array [0..3] of byte;
  filesize:DWORD; fjpg:Tjpegimage;bmp:Tbitmap;
  begin
  result:=nil;
 fstream:=Tfilestream.create(filename,fmOpenRead);
  //建立文件流,读JPEG文件
  fstream.Seek(20,soFromBeginning); //FF ED段在文件的第20个字节 处
fstream.Read(buf,sizeof(buf));
  if PWORD(@buf[0])^=$EDFF then
 begin
   j:=buf[2]*256+buf[3]; //FF ED的大小,高位在前,低位在后
  if j<1024 then //FF ED段的大小若为1024个字节则文件不包含缩览图,退出程序
 begin
  fstream.free;
   exit;
  end;

  mstream:=TMemorystream.Create;//建立内存流

  mstream.CopyFrom(fstream,j); //把FF ED段拷贝到mstream

  data:=mstream.Memory;

  for i:=300 to 700 do //找缩览图的开始标志FF D8

  if PWORD(@data[i])^=$D8FF then break;

  if i<700 then

  begin

  fjpg:=Tjpegimage.Create; //建立TJPEGimage 解出缩览图

  bmp:=TBitmap.Create;

  mstream.Position:=i;

  fjpg.LoadFromStream(mstream);//fjpg读取mstream

  bmp.Assign(fjpg); //JPEG转BMP

  if PWORD(@data[i+57])^=$2e34 then //PhotoShop 4.0的缩览图

  BGR2RGB(bmp); //BMP的像素格式BGR 而不是RGB,要把BGR转化为RGB

  result:=bmp; //函数返回BMP

  mstream.Free;

  fjpg.Free; //释放Object

  end;end;

  fstream.free;

  end;

biu 2002-05-29
  • 打赏
  • 举报
回复
然后把里面的文件数据分离出来 根据文件名写入文件,我已经能够分离出文件部分和文件名部分,就是把文件部分写入了文件以后不能
biu 2002-05-29
  • 打赏
  • 举报
回复
准确一点 应该说是从终端传回的字符串,里面还包含了文件的文件名信息等
qrlvls 2002-05-29
  • 打赏
  • 举报
回复
推啊,说清楚一点才有更多的人帮忙吧!
文件格式知道吗?
biu 2002-05-29
  • 打赏
  • 举报
回复
那是一篇文章还是书呀??
eulb 2002-05-29
  • 打赏
  • 举报
回复
你看过 陈宽达 的 深度历险吗?
他里面有

是用TFileStream实现的
其实也不难
都用TFilestream读取图片和文本然后在写到一个文件里就行了
biu 2002-05-29
  • 打赏
  • 举报
回复
不是了 wsf是谁呀?他有几颗星
biu 2002-05-29
  • 打赏
  • 举报
回复
您只需要告诉我怎么样能把截取的数据部分完好的写入文件就行了,我现在碰到的问题是把数据写入文件以后文件不能使用。这点不会触发到什么商业问题吧
biu 2002-05-29
  • 打赏
  • 举报
回复
图片和文本都有
文本信息记录了文件名
debussy 2002-05-29
  • 打赏
  • 举报
回复
数据到底是什么?图片还是文本?不太明白你的意思。

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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