package com.foxconn.service.util;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.MemoryImageSource;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/*
* 將JDK不支持的BMP格式轉換成支持的JPG格式
* @author LYJ
* @date 2010/09/29
*/
public class ESBMPImg2PIGUtil {
/**
* Created on 2010-7-13 Discription:[bmpTojpg]
*
* @param file
* @param dstFile
*/
public static void bmpTojpg(String file,String dstFile){
try{
FileInputStream in = new FileInputStream(file);
Image TheImage = read(in);
int wideth = TheImage.getWidth(null);
int height = TheImage.getHeight(null);
BufferedImage tag = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(TheImage, 0, 0, wideth, height, null);
FileOutputStream out = new FileOutputStream(dstFile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
out.close();
}
catch (Exception e) {
System.out.println(e);
}
}
public static int constructInt(byte[] in, int offset){
int ret = ((int) in[offset + 3] & 0xff);
ret = (ret << 8) | ((int) in[offset + 2] & 0xff);
ret = (ret << 8) | ((int) in[offset + 1] & 0xff);
ret = (ret << 8) | ((int) in[offset + 0] & 0xff);
return (ret);
}
public static int constructInt3(byte[] in, int offset){
int ret = 0xff;
ret = (ret << 8) | ((int) in[offset + 2] & 0xff);
ret = (ret << 8) | ((int) in[offset + 1] & 0xff);
ret = (ret << 8) | ((int) in[offset + 0] & 0xff);
return (ret);
}
public static long constructLong(byte[] in, int offset){
long ret = ((long) in[offset + 7] & 0xff);
ret |= (ret << 8) | ((long) in[offset + 6] & 0xff);
ret |= (ret << 8) | ((long) in[offset + 5] & 0xff);
ret |= (ret << 8) | ((long) in[offset + 4] & 0xff);
ret |= (ret << 8) | ((long) in[offset + 3] & 0xff);
ret |= (ret << 8) | ((long) in[offset + 2] & 0xff);
ret |= (ret << 8) | ((long) in[offset + 1] & 0xff);
ret |= (ret << 8) | ((long) in[offset + 0] & 0xff);
return (ret);
}
public static double constructDouble(byte[] in, int offset){
long ret = constructLong(in, offset);
return (Double.longBitsToDouble(ret));
}
public static short constructShort(byte[] in, int offset){
short ret = (short) ((short) in[offset + 1] & 0xff);
ret = (short) ((ret << 8) | (short) ((short) in[offset + 0] & 0xff));
return (ret);
}
static class BitmapHeader{
public int iSize,ibiSize,iWidth,iHeight,iPlanes,iBitcount,iCompression,iSizeimage,iXpm,iYpm,iClrused,iClrimp;
// 读取bmp文件头信息
public void read(FileInputStream fs) throws IOException
{
final int bflen = 14;
byte bf[] = new byte[bflen];
fs.read(bf, 0, bflen);
final int bilen = 40;
byte bi[] = new byte[bilen];
fs.read(bi, 0, bilen);
iSize = constructInt(bf, 2);
ibiSize = constructInt(bi, 2);
iWidth = constructInt(bi, 4);
iHeight = constructInt(bi, 8);
iPlanes = constructShort(bi, 12);
iBitcount = constructShort(bi, 14);
iCompression = constructInt(bi, 16);
iSizeimage = constructInt(bi, 20);
iXpm = constructInt(bi, 24);
iYpm = constructInt(bi, 28);
iClrused = constructInt(bi, 32);
iClrimp = constructInt(bi, 36);
}
}
public static Image read(FileInputStream fs)
{
try
{
BitmapHeader bh = new BitmapHeader();
bh.read(fs);
if (bh.iBitcount == 24)
{
return (readImage24(fs, bh));
}
if (bh.iBitcount == 32)
{
return (readImage32(fs, bh));
}
fs.close();
}
catch (IOException e)
{
System.out.println(e);
}
return (null);
}
// 24位
protected static Image readImage24(FileInputStream fs, BitmapHeader bh) throws IOException
{
Image image;
if (bh.iSizeimage == 0)
{
bh.iSizeimage = ((((bh.iWidth * bh.iBitcount) + 31) & ~31) >> 3);
bh.iSizeimage *= bh.iHeight;
}
int npad = (bh.iSizeimage / bh.iHeight) - bh.iWidth * 3;
int ndata[] = new int[bh.iHeight * bh.iWidth];
byte brgb[] = new byte[(bh.iWidth + npad) * 3 * bh.iHeight];
fs.read(brgb, 0, (bh.iWidth + npad) * 3 * bh.iHeight);
int nindex = 0;
for (int j = 0; j < bh.iHeight; j++)
{
for (int i = 0; i < bh.iWidth; i++)
{
ndata[bh.iWidth * (bh.iHeight - j - 1) + i] = constructInt3(brgb, nindex);
nindex += 3;
}
nindex += npad;
}
image = Toolkit.getDefaultToolkit().createImage(
new MemoryImageSource(bh.iWidth, bh.iHeight, ndata, 0, bh.iWidth));
fs.close();
return (image);
}
// 32位
protected static Image readImage32(FileInputStream fs, BitmapHeader bh) throws IOException
{
Image image;
int ndata[] = new int[bh.iHeight * bh.iWidth];
byte brgb[] = new byte[bh.iWidth * 4 * bh.iHeight];
fs.read(brgb, 0, bh.iWidth * 4 * bh.iHeight);
int nindex = 0;
for (int j = 0; j < bh.iHeight; j++)
{
for (int i = 0; i < bh.iWidth; i++)
{
ndata[bh.iWidth * (bh.iHeight - j - 1) + i] = constructInt3(brgb, nindex);
nindex += 4;
}
}
image = Toolkit.getDefaultToolkit().createImage(
new MemoryImageSource(bh.iWidth, bh.iHeight, ndata, 0, bh.iWidth));
fs.close();
return (image);
}
public static void main(String[] args)
{
String srcfile = "d:\\aa.bmp";
String dstFile = "d:\\aa1.jpg";
bmpTojpg(srcfile,dstFile);
}
}
分享到:
相关推荐
因为jdk只识别jpg、png、gif这三种格式的在使用java的时候会需要将bmp格式的图片文件转换成jpg、png、gif等格式,使用此代码可将bmp格式转换成jpg格式,能否转换成其他格式的文件还没有测试
总的来说,将RAW格式转换为BMP格式涉及到对图像数据的深度理解和处理。这个过程不仅仅是简单的格式转换,更是一次图像质量和文件大小之间的权衡。对于需要快速查看或共享图像的场合,BMP格式可能是合适的选择,而...
在“图片格式转换.exe”这个工具中,用户不仅可以将BMP转换为JPG,还可以处理其他常见的图片格式,如PNG、GIF、TIFF等。这些格式各有特点,例如PNG支持透明度,GIF支持动画,TIFF则常用于专业图像编辑。转换过程中,...
在图像处理领域,格式转换是常见的操作之一。本篇文章将深入探讨如何使用C++将BMP(Bitmap)格式的图片转换为RAW纯数据格式。BMP是一种常见的位图格式,通常用于存储数字图像,而RAW格式则保存了相机传感器捕获的...
在IT行业中,图像处理是至关重要的一环,尤其是在嵌入式系统和移动设备上,由于资源有限,往往需要将高精度的图像格式转换为低精度格式以优化显示性能和存储空间。"bmp格式转为rgb565格式图片转换工具"正是针对这种...
BMP图片格式转换为JPG图片格式的Java程序是一种常见的图像处理任务,主要涉及到对数字图像的理解、Java图像处理API的运用以及图像压缩算法的应用。在Java中,我们可以使用`javax.imageio`包来实现这个转换过程。以下...
本文将深入探讨如何在Java中实现图片格式转换,特别是将其他格式(如BMP)转换为ICO图标格式。ICO是一种特殊的图像文件格式,常用于Windows操作系统的应用程序和网站favicon。 首先,我们需要了解Java中的图像处理...
java实现图片bmp转换压缩为jpg,win7格式下转换后图片和原图看起来差别不大
### 基于Java的图片文件格式转换与线性缩放技术详解 #### 一、引言 在当今数字化时代,图像处理技术是信息技术领域的一个重要组成部分。图像处理包括多种操作,如格式转换、图像缩放等。这些操作在很多应用中都至...
在Java编程语言中,将BMP(Bitmap)图像格式转换为JPEG(Joint Photographic Experts Group)格式是一项常见的图像处理任务。BMP是一种无损、未经压缩的图像格式,而JPEG则是一种广泛使用的有损压缩格式,适合存储...
转换BMP到JPG的过程主要涉及图像编码的改变,从无损BMP格式转换为有损JPG格式。这个转换可以使用各种图像处理软件或编程库来完成,例如Adobe Photoshop、GIMP,或者是利用编程语言如Python的PIL(Python Imaging ...
本文将深入探讨如何将JPEG格式的图片转换为单色(黑白色)的BMP格式图片,主要使用Java编程语言来实现这一过程。 首先,我们需要理解JPEG和BMP这两种图片格式。JPEG(Joint Photographic Experts Group)是一种广泛...
此外,某些应用程序或设备可能仅支持JPG格式,这也需要进行格式转换。 4. **转换方法**: - 使用图像处理软件:比如Adobe Photoshop、GIMP等,可以打开BMP文件,然后将其另存为JPG格式。 - 在线转换工具:许多...
- **格式转换**:ImageJ支持多种图像格式的读取和写入,如TIFF、JPEG、BMP、PNG等,这使得它在处理不同来源的图片时具有极高的灵活性。 - **图片放大缩小**:ImageJ可以对图片进行无损或有损的缩放,通过插值算法...
android jni 将wlt图片转成bmp格式图片,支持32位armeabi架构手机
这个函数接收Jpg文件路径和目标Bmp文件路径作为参数,使用`Image.open()`打开Jpg文件,然后用`save()`方法将其保存为Bmp格式。 2. **Bmp转Jpg:** ```python def bmp_to_jpg(bmp_path, jpg_path): image = Image....
本文将详细介绍如何使用Java进行图片格式转换,并提供一个具体的代码示例。 #### 二、基础知识介绍 在深入讲解之前,我们先来了解一下基础概念: 1. **BufferedImage类**:这是一个非常重要的类,用于表示包含颜色...
本篇文章将详细探讨如何利用Java与JAI-ImageIO库进行JPEG(jpg)与RAW格式图片之间的转换。 首先,让我们了解这两种图像格式。JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩图像格式,适用于...
bmp/rgb24转成nv21/nv12的java代码,经实际测试是正确的,网上很多提供的JAVA代码实际上转换成来的格式不对,附件里是java的完整代码,直接编译即可生成face.nv21 face.nv12两种格式文件,可使用yuvplayer.exe打开...
Android不支持将Bitmap转换成单色的Bmp图片,所以参考Bmp格式说明,自己写了一个转换类。亲测有效!!!