jpeg显示出错:JPEG error #41,数据转存出的毛病(100分)

  • 主题发起人 主题发起人 xinjia
  • 开始时间 开始时间
X

xinjia

Unregistered / Unconfirmed
GUEST, unregistred user!
sql2000的graph字段保存的jpe图片。通过窗体上的image可以显示
存储语句:
tblobfield(adotable1.FieldByName('照片')).LoadFromFile('temp.jpg');
显示语句:
tblobfield(table1.FieldByName('照片')).SaveTofile('temp.jpg') ;
image1.Picture.LoadFromFile('temp.jpg');
显示正常,我把sql数据库转储成delphi的paradox数据库,其中图像字段paradox数据库中
类型是blob
转换语句:
TBlobfield(adotable1.FieldByName('照片')).SaveTofile('temp.jpg');
TBlobField(table1.FieldByName('照片')).LoadFromfile('temp.jpg');
再用image显示时就出这个错:JPEG error #41 显示操作同上

 
不太难的问题吧?怎么没有回答。
 
是不是因为在程序开始的USER里面,你没有加jpeg单元的原因
 
你参考一下下面的代码,关键是你的Paradox数据表的字段类型是否Binary,
有必要的话我把整个例程发给你(Delphi 6的)
另外,
TBlobfield(adotable1.FieldByName('照片')).SaveTofile('temp.jpg');
//下面这一句就不要了吧
TBlobField(table1.FieldByName('照片')).LoadFromfile('temp.jpg');

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtDlgs, DB, ExtCtrls, DBCtrls, Grids, DBGrids,
DBTables, Jpeg;

type
TForm1 = class(TForm)
Table1: TTable;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
OpenPicDlg: TOpenPictureDialog;
Button1: TButton;
Button2: TButton;
SavePicDlg: TSavePictureDialog;
Panel1: TPanel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
//读取图片写入数据库
if OpenPicDlg.Execute then
begin
Table1.Insert;
TBlobField(Table1.FieldByName('PicData')).LoadFromFile(OpenPicDlg.FileName);
Table1.Post;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Open;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Table1.Close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//将数据库中的图片取出保存为文件
if SavePicDlg.Execute then
begin
TBlobField(Table1.FieldByName('PicData')).SaveToFile(SavePicDlg.FileName);
Image1.Picture.LoadFromFile(SavePicDlg.FileName);
end;
end;

end.

 
uses当然里加了jpeg要不然,也不能实现jpg图像字段从paradox->ms-sql。现在是
从ms-sql->paradox出错。
我用两个数据库控件adotable取mssql;table操作paradox
mssql字段类型是image,paradox字段类型是binary.
jpeg图像可以从paradox表中取出显示,可以转入mssql
mssql也可以取出jpg图像显示,但转回paradox表中后再显示时出错
 
我也有同样类似的问题 如下:
var
BitMap:TBitmap;
MyJpeg: TJpegImage;
TempStream : TMemoryStream;
begin
//TempStream 加载一幅jpg图象,代码略
……
MyJpeg.LoadFromStream(TempStream);
bitmap.Assign(MyJpeg); // 这句会报错‘JPEG error #41’
end;

请问各位这是怎么回事?? 请指教!!谢谢
 
原因是图片超过了32k.
 
我想是不是temp.jpg还没生成就去读它而出错,试一试延时再读,我建议把它savetostream
,再Ajpeg.loadformstream好
 
It's jpeg file error or no this jpeg, jpeg fiel pointer is null
 
多人接受答案了。
 
后退
顶部