uses JPEG,DB;
{写入}
procedure TForm1.Button1Click(Sender: TObject); //加载图片
begin
if open.Execute then
begin
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text:='insert into text(pic) values(:pic)';
form1.ADOQuery1.Parameters.ParamByName('pic').LoadFromFile(open.FileName,ftBlob);
form1.ADOQuery1.ExecSQL;
end;
end;
{读取}
procedure TForm1.ShowPicture;
var
MS: TMemoryStream;
JpegImage: TJpegImage;
Buffer:Word;
begin
MS := TMemoryStream.Create;
TBlobField(AdoTable1.FieldByName('picture')).SaveToStream(MS);
MS.Position := 0;
ms.ReadBuffer(Buffer,2);
if Buffer=$D8FF then {JPEG}
begin
JpegImage := TJpegImage.Create;
JpegImage.LoadFromStream(MS);
Image1.Picture.Graphic := JPegImage;
JpegImage.Free;
end
else if Buffer=$4D42 then {BMP}
begin
Image1.Picture.Bitmap.LoadFromStream(MS)
end;
MS.Free;
end;
-----------------------------------------------------------------------------
jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样)
BMP文件 是 424D ---4D42
其他的我就不一一列举了,想知道跟多文件类型分别是用什么字符作为文件的开头的话,下载个C32asm或者UE等这类16进制编辑器就可以看到了。
procedure TForm1.Button1Click(Sender: TObject); //Button1的单击事件
var
var
//声明变量
MyImage:TMemoryStream; //内存流对象
Buffer:Word;
i:integer;
begin
if OpenDialog1.Execute then
//OpenDialog1是一个文件打开对话框,在Delphi组件面版的Dialog页中可以找到。
begin
MyImage:=TMemoryStream.Create; //建立内存流对象
MyImage:=TMemoryStream.Create; //建立内存流对象
try
MyImage.LoadFromFile(OpenDialog1.FileName);
MyImage.LoadFromFile(OpenDialog1.FileName);
//把刚刚用户选择的文件载入到内存流中 MyImage.Position := 0;
MyImage.Position := 0;
//移动指针到最开头的位置 if MyImage.Size = 0 then
if MyImage.Size = 0 then
//如果文件大小等于0,那么
begin
//错误
ShowMessage('错误');
Exit;
end;
MyImage.ReadBuffer(Buffer,2);
MyImage.ReadBuffer(Buffer,2);
//读取文件的前2个字节,放到Buffer里面
if Buffer=$4D42 then
//如果前两个字节是以4D42[低位到高位]
begin
ShowMessage('BMP');
//那么这个是BMP格式的文件
end
else if Buffer=$D8FF
then //如果前两个字节是以D8FF[低位到高位]
begin
//JPEG
ShowMessage('JPEG'); //........一样 下面不注释了
end
else if Buffer=$4947
then begin
//GIF
ShowMessage('GIF');
end
else if
Buffer=$050ABuffer=$050A
then begin
//PCX
ShowMessage('PCX');
end
else if
Buffer=$5089Buffer=$5089
then begin
//PNG
ShowMessage('PNG');
end
else if
Buffer=$4238Buffer=$4238
then begin
//PSD
ShowMessage('PSD');
end
else if
Buffer=$A659Buffer=$A659
then begin
//RAS
ShowMessage('RAS');
end
else if
Buffer=$DA01Buffer=$DA01
then begin
//SGI
ShowMessage('SGI');
end
else if
Buffer=$4949Buffer=$4949
then begin
//TIFF
ShowMessage('TIFF');
end
else
//如是其他类型的文件的话,直接显示错误
begin
//ERR
ShowMessage('ERR');
end;
//if end; //if
end; //if
finally
MyImage.Free; //释放内存流对象
end;
上面的过程只是简单的判断文件的前2个字节,如果想更加精确一点的话,可以把文件最后2个字节也判断上。