有关于 JPG图象处理的问题 (scan line index out of range)(50分)

  • 主题发起人 主题发起人 sunys
  • 开始时间 开始时间
S

sunys

Unregistered / Unconfirmed
GUEST, unregistred user!
function Bmptojpeg(bmpfilename,jpegfilename:string):String;
var
Jpeg:TJpegimage;
Bitmap:TBitmap;
begin
result:='';
try
Jpeg:=TJpegimage.create;
Bitmap:=TBitmap.create;
Bitmap.LoadFromFile(Bmpfilename);
Jpeg.Assign(Bitmap);
if trim(jpegfilename)='' then
begin
jpegfilename:=copy(Bmpfilename,1,pos('.',Bmpfilename))+'jpg';
end;
//jpeg.PixelFormat:=jf8Bit;
jpeg.SaveToFile(jpegfilename);
result:=jpegfilename;
finally
Bitmap.Free;
Jpeg.Free;
end;
end;
现在有一副BMP图象,我想转换为JPG图象时, jpeg.SaveToFile(jpegfilename);
就会出现(scan line index out of range)的错误,我加了这句jpeg.PixelFormat:=jf8Bit;
不会出现错误,但是转换后的JPG图象的大小为0,什么也看不到。向各位高手请教了

 
我使用没有错误,你再试试:

function Bmptojpeg(bmpfilename,jpegfilename:string):String;
var
Jpeg:TJpegimage;
Bitmap:TBitmap;
begin
result:='';
try
Jpeg:=TJpegimage.create;
Bitmap:=TBitmap.create;
Bitmap.LoadFromFile(Bmpfilename);
Jpeg.Assign(Bitmap);
if trim(jpegfilename)='' then
begin
jpegfilename:=copy(Bmpfilename,1,pos('.',Bmpfilename))+'jpg';
end;
//jpeg.PixelFormat:=jf8Bit;
jpeg.SaveToFile(jpegfilename);
result:=jpegfilename;
finally
Bitmap.Free;
Jpeg.Free;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Bmptojpeg('f:/图片/dt.bmp','f:/图片/dt.jpg');
end;
 
我这个比较奇怪,其他的BMP都可以进行转换成JPG的,
就是有一副BMP就是不行,出现这样的错误。

如果不加jpeg.PixelFormat:=jf8Bit 。就会出错。加了后JPG大小为0。打开后是个叉
 
那就是你这副bmp图片本身的问题了,^_^
或者发给我,我试试。
forevertyn@sina.com
 
好的,谢谢斑竹,不过那副BMP很小很小的,我已经发送了 forevertyn@sina.com
我放在附件里时看到的竟是0个字节。

实际是86个字节。
 
收到邮件,可是仅仅86字节,怎么打开啊?
偶打不开。

bmp才86字节,转为jpg才几字节啊?
是bmp本身的错误。
 
你说邮件打不开吗。其实我想转换时,遇到这样的比较少的。

我再想问一下 如果这句没写 jpeg.PixelFormat:=jf8Bit ,那么他默认是的jpeg.PixelFormat是多少呢
 
>如果这句没写 jpeg.PixelFormat:=jf8Bit ,那么他默认是的jpeg.PixelFormat是多少呢
你将bmp转换为jpg,bmp本身的PixelFormat是一定的,而jpeg.PixelFormat只有两种形式:
就是jf24Bit和jf8Bit;
在转化时,jpeg.PixelFormat :=bmp.PixelFormat;
 
jpeg.PixelFormat 和 bmp.PixelFormat根本不是同一个类型的,呵呵。
 
多人接受答案了。
 
jpeg.PixelFormat :=bmp.PixelFormat;
我是说如果bmp.PixelFormat :=pf24Bit,那么jpeg.PixelFormat :=jf24Bit.
 
后退
顶部