当前位置:  技术问答>java相关

如何把bmp文件转换成jpg文件格式.

    来源: 互联网  发布时间:2017-04-29

    本文导语:  是想用java程序实现读取一个bmp文件后把它转换成jpg格式。  公司急需 | 下面是转载的一篇java读取BMP图片的文章,将组件上的图片存成JPG文件,可以参考Java的Demo程序Font2DTest: ---------------------------...

是想用java程序实现读取一个bmp文件后把它转换成jpg格式。 
公司急需

|
下面是转载的一篇java读取BMP图片的文章,将组件上的图片存成JPG文件,可以参考Java的Demo程序Font2DTest:
------------------------------------------------------------------------------

在 Java 应用程序中加载位图文件的逐步指南 
作者:Jeff West 和 John D. Mitchell 
[BLOCKQUOTE]摘要 
目前,标准的 getImage() 方法仅支持 GIF 和 JPEG 图像。尽管存在用于读取 PNG(可移植网络图形)格式的 Java 例程,但我们还没听说过有用于读取 Microsoft Windows 位图图像的阅读程序。Jeff West 撰写的这篇技巧提供了加载 Windows 位图图像的代码。 [/BLOCKQUOTE]Java 的当前发行版并不正式支持在 Java 应用程序中读取 Microsoft Windows 位图文件。但别担心,我们有办法解决这个问题!这篇技巧将说明如何完成这一任务 -- 我们首先说明读取 Microsoft Windows 文件格式的基本步骤。 
Windows DIB(设备独立的位图)文件格式比较简单。与纯位图格式不同,DIB 格式保留着用于在内存中存储图像的明确信息。问题是图像格式的变体如此之多(1 位、4 位、8 位和 16 位,以及其他格式)。本篇 Java 技巧中提供的解决方案只处理 8 位和 24 位两种格式。这两种格式代表了最常见的变体。 
不管是哪种 Windows DIB 子类型,这种文件格式总是由 14 位文件头和 40 位信息头组成。这两个标头精确包含有关文件的存储内容和存储次序的信息。有关标头中每一项的确切含义,请参考 Microsoft Software Development Kit (SDK)。文件其余部分的内容随信息头中数据的不同而不同。 
我们看一下本文要处理的两种子类型。24 位格式很简单:RGB(红-绿-蓝)颜色值(3 个字节,并按 BGR 排序)紧接在信息头之后。但是,每个扫描行都被补足到 4 个字节。按照说明文档(请参阅 Microsoft SDK)的说法,这种“补足”是为了优化 Windows 位图绘图 API。同时,底部的扫描行是文件中的第一项内容 -- 因此相对普通的图形坐标系统(其矢量方向的正向分别为向下和向右)而言,必须从后向前读取图像。 
8 位子类型由于在信息头和象素数据之间插入调色板信息而复杂化。因此,每个象素条目只是进入 24 位 RGB 颜色的调色板数组的一个 8 位索引。在象素信息中,每个扫描行同样被补足到 4 个字节。 
请注意,本文提供的位图图像加载方法不支持对压缩位图图像进行解压缩。实际上,这个例程甚至不寻求这种可能性!如果遇到压缩 Windows DIB 文件,该例程肯定会产生异常。Windows SDK 中有对压缩 Windows DIB 格式的说明。 
至于性能,在运行 Microsoft Windows 95 的 486-DX2-66MHz 系统上,该例程读取 24 位 640 x 480 的文件(大约 920 千字节)所需的时间不超过 10 秒。使用 BufferedInputStream 而不是 FileInputStream 可明显提高性能。 
以下例程读取两种文件格式中的任一种,并生成一个 Image 图像。以下代码并未包含全面的错误和异常处理,以避免使该例程更加复杂。您总可用 Windows Paint 程序对不支持的 Windows DIB 子类型进行转换。 
/** 
loadbitmap() 方法由 Windows C 代码转换而来。 
只能读取未压缩的 24 位和 8 位图像。已在 
Windows 95 上用 Microsoft Paint 保存的图像 
对它进行了测试。如果图像不是 24 位或 8 位图像, 
该程序拒绝进行任何尝试。我猜测如果先用 1100, 
然后用 0011 对字节执行掩码操作,则也可将 4 位 
图像包括在内。我实际上对这些图像不感兴趣。 
如果尝试读取压缩图像,该例程可能失败,并产生 
一个 IOException 异常。如果变量 ncompression 
不为 0,则表示已经过压缩。 

参数: 
sdir 和 sfile 是 FileDialog 的 
getDirectory() 和 getFile() 方法的结果。 

返回值: 
Image 对象,切记要检查 (Image)null !!!! 

*/ 
public Image loadbitmap (String sdir, String sfile) 

Image image; 
System.out.println("loading:"+sdir+sfile); 
try 

FileInputStream fs=new FileInputStream(sdir+sfile); 
int bflen=14; // 14 字节 BITMAPFILEHEADER 
byte bf[]=new byte[bflen]; 
fs.read(bf,0,bflen); 
int bilen=40; // 40 字节 BITMAPINFOHEADER 
byte bi[]=new byte[bilen]; 
fs.read(bi,0,bilen); 

// 解释数据。 
int nsize = (((int)bf[5]&0xff)

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 显示.BM格式的BMP图
  • Unix下如何显示bmp格式的位图(使用xWindow的API)?
  • Java 都支持那些图形格式?为什么连 ICON 和 BMP 这样通用的格式都不自带支持!!!!!
  • java命名空间javax.imageio.plugins.bmp类bmpimagewriteparam的类成员方法: istopdown定义及介绍
  • 可视化设计写bmp的一些问题!
  • java命名空间javax.imageio.plugins.bmp类bmpimagewriteparam的类成员方法: bmpimagewriteparam定义及介绍
  • 用JB6怎样创建BMP??????????
  • 请教高手关于ejb2.0的BMP问题
  • 菜鸟问题,Cmp和bmp是什么东西?
  • BMP 进行数据库操作,与bean本身有什么关系。。
  • uboot中bmp命令添加问题
  • BMP图像处理库 bmplib
  • java bean 调用 EJB(BMP) 的问题
  • 有没有人用BMP,我在安装后出现问题
  • 请问BMP和CMP分别个应用于那些情况
  • QT编程问题(显示BMP图)
  • ejb的bmp向oracle表插入图片记录的问题!
  • 如何做到在命令行下输入文字,然后输出包含该文字的图片(bmp or gif)?
  • linux怎么打开bmp.jpg.gif.
  • 各位老大,可以提供一个EJB(BMP)的例子吗? 同时请教PK类的作用?(给例子就有分)
  • 我想在linux下面用图形界面显示一个bmp二值图片,应该怎么做呢?
  • 哪位大侠能给我讲一下bmp和cmp的优缺点,以及在什么时候使用最好。。
  • sdl显示一张bmp图片示例
  • a tool class to convert bmp to wbmp used in wap


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3