如何把jpeg还原成bmp?

bbcock 2008-04-14 08:49:35
我想把按jpeg格式有损或无损压缩的数据,还原为bmp格式,看了网上一些介绍jpeg格式的文章和压缩解压缩的文章,格式差不多了,可压缩解压缩的过程还是搞不清楚,哪位可以详细介绍一下呢?谢谢!
...全文
283 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
支持中文哦 2008-07-31
  • 打赏
  • 举报
回复
应该说是格式转换,而不是还原哈。
bbcock 2008-07-27
  • 打赏
  • 举报
回复
dingding
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
不会,帮顶
ehom 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 byteh 的回复:]
对了,楼主是不是可以看一下jpeg.pas???

我也没有细看过,所以仅供参考
[/Quote]

完全错了jpeg.pas里只是对libjpeg的封装和转换成TBitmap位图的相关代码

LZ可下份libjpeg,细节都有

数字解码完成后主要步骤如下:反量化,重排列数据为8x8矩阵,IDCT,转YcrCb到RGB...
gyk120 2008-04-18
  • 打赏
  • 举报
回复
如果楼主学过VC++的话自己去找一下相关的代码即可
解码方式有很多种,这恐怕一时说不清楚,就算是vc都至少有2种
wangxuelid 2008-04-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bbcock 的回复:]
呵呵,如果不想了解过程我就不用发这个帖子了

我现在从jpeg文件中得到哈夫曼表,生成哈夫曼树,然后该怎么解码呢?
[/Quote]
bang ding ,,,处理图片需要这么麻烦吗?
bbcock 2008-04-17
  • 打赏
  • 举报
回复
呵呵,如果不想了解过程我就不用发这个帖子了

我现在从jpeg文件中得到哈夫曼表,生成哈夫曼树,然后该怎么解码呢?
bbcock 2008-04-16
  • 打赏
  • 举报
回复
jpeg的文件格式我研究得差不多了,现在主要的问题是:已知huffman表的数据,如何对jpeg数据解码?
killerprince 2008-04-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 here 的回复:]
我觉得有时,能解决问题就好了,没必要了解他做的过程。
[/Quote]
同意
here 2008-04-16
  • 打赏
  • 举报
回复
我觉得有时,能解决问题就好了,没必要了解他做的过程。
byteh 2008-04-16
  • 打赏
  • 举报
回复
对了,楼主是不是可以看一下jpeg.pas???

我也没有细看过,所以仅供参考
byteh 2008-04-16
  • 打赏
  • 举报
回复
佩服佩服

是不是还要了解一下bmp格式?以及bmp2jpg的算法?
bmp这种位图格式到jpg究竟压缩掉了那些东东,该怎么还原
我只知道一种方法的皮毛,就是把颜色相同的区域(比如颜色代码是01001,应该是一个矩阵)转换为只存储颜色代码和区域(或位置)的代码,bmp To jpg 的压缩程度一定程度上也就是颜色(色深)相似度的范围
bbcock 2008-04-15
  • 打赏
  • 举报
回复
我的意思是自己分析jpeg的格式,而不是用这种办法。

我现在可以得到jpeg中霍夫曼表DHT的数据,该怎么解码呢?
myvicy 2008-04-15
  • 打赏
  • 举报
回复
想自己分析图片的数据啊,这个要熟悉图片数据文件的结构.
pilicat 2008-04-15
  • 打赏
  • 举报
回复
喔,我觉得还是用TBitmap控件来转一下最为方便,虽然速度上可能会慢一些。
oushengfen 2008-04-14
  • 打赏
  • 举报
回复
procedure JPG2BMP(const Source, Target:string);
var
JPG: TJpegImage;
BMP: TBitmap;
begin
BMP := TBitmap.Create;
JPG := TJpegImage.Create;
try
JPG.LoadFromFile(Source);
BMP.Assign(JPG);
BMP.SaveToFile(Target);
finally
BMP.free;
JPG.Free;
end;
end;


procedure ZoomBmp(Source: String; dWidth, dHeight: Integer; var des: TBitmap);
var
ori,imagen: TBitmap;
dispositivo_o, dispositivo_d: HDC;
pepito: HBitmap;
begin
try
ori := Tbitmap.Create;
des := TBItmap.Create;
imagen := TBitmap.Create;
imagen.LoadFromFile(Source);
ori.handle := imagen.handle;
des.width := dWidth;
des.height := dHeight;
dispositivo_o := CreateCompatibleDC(0);
dispositivo_d := CreateCompatibleDC(0);
SelectObject(dispositivo_o, ori.handle);
pepito := SelectObject(dispositivo_d, des.handle);
SetStretchBltMode(dispositivo_d, STRETCH_HALFTONE);
StretchBlt(dispositivo_d, 0, 0, dWidth, dHeight, dispositivo_o, 0, 0, ori.width, ori.height, SRCCOPY);
SelectObject(dispositivo_d, pepito);
finally
ori.Free;
DeleteObject(pepito);
DeleteDC(dispositivo_o);
DeleteDC(dispositivo_d);
end;
end;

采用以上方法,效果还可以,失真肯定会有的,只是多少的问题.
byteh 2008-04-14
  • 打赏
  • 举报
回复
procedure SaveJpegToSys(aPicFileName:TFileName;aInSysFileName:TFileName);
//把.jpeg文件转化成.bmp文件后保存在系统的windows目录下mywallpaper.bmp
var
pic_jpeg:TJpegImage;
pic_bmp:TBitMap;
begin
pic_jpeg:=TJpegImage.Create;
try
pic_bmp:=TBitMap.Create;
try
pic_jpeg.LoadFromFile(aPicFileName);
pic_bmp.Assign(pic_jpeg);
pic_bmp.SaveToFile(aInSysFileName);
finally
pic_bmp.Free;
end;
finally
pic_jpeg.Free;
end;
end;
byteh 2008-04-14
  • 打赏
  • 举报
回复
jpg 2 bmp 通常为有损压缩,即使还原也不可能完全恢复原来的品质

不信你拿AcdSee试试

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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