怎样才能将JPG(JPEG)格式的图形文件转换成BMP格式的图形文件呢???(100分)

  • 主题发起人 主题发起人 小J
  • 开始时间 开始时间

小J

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一段代码,是将 .jpg 和 .jpeg 的图形文件转换为 .bmp 的代码,可是执行后可转换
成的文件并不是真正的 .bmp 格式的文件!请问各位大哥大姐们,应该怎么做才对呀???
procedure TForm1.btnAddClick(Sender: TObject);
var
I,starting, delLengths, nameLength: Integer;
sourcefileName, testName, fileSuffix, name, fDir: String;
begin
starting := 1;
testName := 'Y';
delLengths := Length(FileListBox1.Directory);
fName := FileListBox1.FileName;
//extractfileext 函数 返回文件的后缀
fileSuffix := extractfileext(fName);
//extractfilename 函数 返回文件名
name := extractfilename(fName);
nameLength := length(name);
//extractfiledir 函数 返回驱动器和路径
fDir := extractfiledir(fName);
if (fileSuffix = '.jpg') or (fileSuffix = '.jpeg') then
begin

if fileSuffix = '.jpg' then
Delete(Name, nameLength-3, nameLength);
if fileSuffix = '.jpeg' then
Delete(Name, nameLength-4, nameLength);

JpegToBmp(fName,fDir,name);
fName := fDir + '/' + name + '.bmp';
end;

Delete(fName, starting, delLengths + 1);
if ListBox1.Items[0] <> '' then
begin
for i := 0 to (ListBox1.Items.Count - 1 ) do begin
if ListBox1.Items = fName then
begin
testName := 'N';
break;
end;
end;
if testName = 'Y' then
begin
ListBox1.Items.Add(fName);
fName := MapsPath + fName;
sourcefileName := FileListBox1.FileName;
CopyFile(pchar(sourcefileName),pchar(fName),false);
end;
end
else
begin
ListBox1.Items.Add(fName);
fName := MapsPath + fName;
sourcefileName := FileListBox1.FileName;
CopyFile(pchar(sourcefileName),pchar(fName),false);
end;

end;
 
uses Jpeg;

var
jpg :TJpegImage;
bmp :TBitmap;
begin
jpg :=TJpegImage.Create;
jpg.LoadFromFile('图片路径');
bmp :=TBitmap.Create;
bmp.Assign(jpg);
bmp.SaveToFile('存储的路径');
bmp.Free;
jpg.Free;
end;
 
补充:图形转换的函数
procedure TForm1.JpegToBmp( fNameJpeg,fDir,name: String);
var
jpeg: Tjpegimage;{Tjpegimage对象在Jpeg单元中声明,需要在Uese 中引用Jpeg单元}
bmp: Tbitmap;
begin
jpeg:=tjpegimage.Create;
jpeg.LoadFromFile(fNameJpeg);{加载被用户选中的文件}
bmp:=tbitmap.Create;
bmp.assign(jpeg);
bmp.savetofile(fDir + '/' + name + '.bmp');{将转换成功的文件保存的路径及文件名}
end;
虽然可以将 *.jpg 的文件转换(类似于另存)为 *.bmp 的文件,但并不表示它的格式
也转换了:
首先,它的文件大小没有变( jpg 是 bmp 的压缩了的格式)
其次,虽然它的后缀名变成了 bmp ,可是在 windows 的画图软件里打开它后,选“另存
为”时,它的默认扩展名还是 .jpg 。
是不是还有其它的方法可以将 .jpg(jpeg)文件转换为 .bmp 文件?(就像 ACDsee里
的图形转换一样!)
 
>首先,它的文件大小没有变
实验证明,转换前后大小变化

>其次,虽然它的后缀名变成了 bmp ,可是在 windows 的画图软件里打开它后,选“另存
为”时,它的默认扩展名还是 .jpg 。
我试过了,用WINDOWS的画笔打开,另存为时,是 .bmp格式
 
请问这位大虾:我的这段代码是不是有什么问题呀?
 
你的CODE。。。。
你试试用我的那段CODE转换试试看。
 
我又试了好几遍,有时候能成,有时候又不能,为什么呢? 代码现如下:
procedure TForm1.JpegToBmp( fNameJpeg,fDir,name: String);
var
jpeg: TJpegImage;{Tjpegimage对象在Jpeg单元中声明,需要在Uese 中引用Jpeg单元}
bmp: TBitmap;
begin
jpeg:=TJpegImage.Create;
jpeg.LoadFromFile(fNameJpeg);{加载被用户选中的文件}
bmp:=TBitmap.Create;
bmp.assign(jpeg);
bmp.savetofile(fDir + '/' + name + '.bmp');{将转换成功的文件保存的路径及文件名}
bmp.Free;
jpeg.Free;
end;
 
是不是出现jpeg#52的错误提示呢?
那就不是程序的问题了,而是图片本身的问题。
 
同意卷起千堆雪tyn的观点
 
procedure TpfEditForm.FormShow(Sender: TObject);
var
tempStream: TStringStream;
tempJpeg: TJpegImage;
begin
try
tempStream := TStringStream.Create('');
TBlobField(DMForm.adoqrypf.FieldByName('picture')).SaveToStream(tempStream);
tempStream.Position := 0;
TempJpeg := TJpegImage.Create;
TempJpeg.LoadFromStream(tempStream);
DBImage1.Picture.Bitmap.Assign(TempJpeg);
finally
tempStream.Free;
tempJpeg.Free;
end;
end;
 
这样的转换其实没有什么意义。
建议参考图形图象类书籍,通过修改图象的头文件及存贮格式,转换成真正的bmp图象。
 
多谢各位,问题解决了!
其实问题出在我程序的其它部分:我在图形转换后又拿原先那个 .jpg 文件给拷贝更名为
.bmp 文件拿来用啦!(真不好意思,^_^)
但是,有一点不明白,直接拷贝转换 有时候能成功,而有时候又会失败呢???
 
请问jorgeww:“通过修改图象的头文件及存贮格式,转换成真正的bmp图象”具体的做
法是什么呢?能否详解,小生在此有礼啦!
 
jpeg的压缩方式是有损压缩,没必要通过jpeg的存储格式反推bmp文件

可以create一个大小一样的bitmap,然后画上,最后将这个bitmap存成文件
 
搜索以前的贴子吧,很好的。
 
大家上面的说的基本都对了
 
不知道大家对分辨率的问题怎么看,当jpg转换成bmp后分辨率发生了变化。
 
后退
顶部