`

网络BMP图片本地保存

    博客分类:
  • java
 
阅读更多
import java.awt.image.BufferedImage;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
 
public class BMPWriter {
 
    public static void write(BufferedImage img, File out) {
 
        int width = img.getWidth();
        int tripleWidth = width * 3;
        int height = img.getHeight();
        int fullTriWidth = tripleWidth % 4 == 0 ? tripleWidth
                : 4 * ((tripleWidth / 4) + 1);
        int[] px = new int[width * height];
        px = img.getRGB(0, 0, width, height, px, 0, width);
        byte[] rgbs = new byte[tripleWidth * height];
        int index = 0;
        // r, g, b数组
        for (int i = height - 1; i >= 0; i--) {
            for (int j = 0; j < width; j++) {
                int pixel = px[i * width + j];
                rgbs[index++] = (byte) pixel;
                rgbs[index++] = (byte) (pixel >>> 8);
                rgbs[index++] = (byte) (pixel >>> 16);
            }
        }
        // 补齐扫描行长度为4的倍数
        byte[] fullrgbs = new byte[fullTriWidth * height];
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < fullTriWidth; j++) {
                if (j < tripleWidth) {
                    fullrgbs[fullTriWidth * i + j] = rgbs[i * tripleWidth + j];
                } else {
                    fullrgbs[fullTriWidth * i + j] = 0;
                }
            }
        }
 
        index = 0;
 
        int fheader = 14;
        int infoheader = 40;
        int board = 0;
        int offset = fheader + infoheader + board;
        int length = width * height * 3 + offset;
        short frame = 1;
        short deep = 24;
        int fbl = 3800;
        DataOutputStream dos = null;
        try {
            FileOutputStream fos = new FileOutputStream(out);
            dos = new DataOutputStream(fos);
            dos.write('B');
            dos.write('M');// 1格式头
            wInt(dos, length);// 2-3文件大小
            wInt(dos, 0);// 4-5保留
            wInt(dos, offset);// 6-7偏移量
            wInt(dos, infoheader);// 8-9头信息
            wInt(dos, width);// 10-11宽
            wInt(dos, height);// 12-13高
            wShort(dos, frame);// 14 = 1帧数
            wShort(dos, deep);// 15 = 24位数
            wInt(dos, 0);// 16-17压缩
            wInt(dos, 4);// 18-19 size
            wInt(dos, fbl);// 20-21水平分辨率
            wInt(dos, fbl);// 22-23垂直分辨率
            wInt(dos, 0);// 24-25颜色索引 0为所有
            wInt(dos, 0);// 26-27重要颜色索引 0为所有
            // wInt(0);//28-35
            // wInt(0);
            // wInt(0);
            // wInt(0);//28-35彩色板
            dos.write(fullrgbs);
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                dos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
    private static void wInt(DataOutputStream dos, int i) throws IOException {
        dos.write(i);
        dos.write(i >> 8);
        dos.write(i >> 16);
        dos.write(i >> 24);
    }
 
    private static void wShort(DataOutputStream dos, short i)
            throws IOException {
        dos.write(i);
        dos.write(i >> 8);
    }
 
}

 

上述代码是bmp写入类;

 

剩下的就是下载的事了,

try {
   url = new URL(src);
   HttpURLConnection con;
   con = (HttpURLConnection) url.openConnection();
   con.setRequestMethod("GET");
   InputStream is = con.getInputStream();
   byte[] data = readInputStream(is);
   File imageFile = new File(localFileName);   
   if(source.equals("bmp")) {
    ByteArrayInputStream in = new ByteArrayInputStream(data);    //将b作为输入流;
    BufferedImage image = ImageIO.read(in);
    BMPWriter.write(image, imageFile);
   }else {
    FileOutputStream fos = new FileOutputStream(imageFile);
    fos.write(data);
    fos.close();
   }   

  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 

PS:还要用到的将

BufferedImage与byte[]互转 http://qianxunniao.iteye.com/admin/blogs/1730291

 

分享到:
评论

相关推荐

    BMP图片保存为WMV格式视频

    以上就是将BMP图片保存为WMV格式视频的关键知识点。通过理解这些概念和技术,开发者可以构建自己的转换工具,实现图像到视频的无缝转换。在这个过程中,VS2010和DirectShow提供了强大的工具和接口,帮助我们高效地...

    网络上的bmp翻转方法收集试了一下

    在网络环境下,通常需要先下载BMP文件到本地,然后使用编程语言(如Python的PIL库,C++的OpenCV库等)处理翻转操作,最后可以将翻转后的图像上传回服务器或者保存为新的BMP文件供后续使用。 6. 示例代码 以下是一...

    C#获取图片并保存到本地

    根据提供的文件信息,本文将详细解释如何在C#中实现从网络上获取图片并将其保存到本地的方法。此过程涉及到了HTTP请求、流处理、文件操作等关键概念和技术。 ### 标题:“C#获取图片并保存到本地” 标题直接说明了...

    mnist数据集bmp图片

    这些图像最初是以二进制格式存储的,但在这个“mnist数据集bmp图片”中,图像已经被转换为.bmp格式,这是一种常见的位图图像文件格式,便于在本地直接查看和使用。 **数据预处理** 在使用MNIST数据集进行模型训练...

    socket bmp

    接收端收到数据后,需要正确地解析字节流,重构BMP文件并保存到本地。在这个过程中,需要注意字节顺序问题,因为不同的计算机架构可能有不同的字节序(大端或小端),这可能会影响到数据的正确解析。 为了提高传输...

    pic_pro.rar_lena.bmp_lena256 bmp_图像处理_图像处理 图_经典图像素材

    BMP文件通常较大,不适合网络传输,但在本地处理时能提供原始图像数据,便于分析和处理。 "图像处理"是指对数字图像进行操作,以改善其质量、提取有用信息或进行艺术创作。它涵盖了众多技术,如图像采集、色彩空间...

    yuv转bmp-yuv转jpg源码.rar

    BMP文件包含图像的所有信息,包括颜色深度、宽度、高度和实际像素数据,适合于本地存储和显示。 JPEG(Joint Photographic Experts Group)是一种广泛用于网络和数字媒体的有损压缩图像格式。它通过丢弃人眼难以...

    stm32f4摄像头数据转bmp上传onenet.zip

    在项目中,STM32F4将接收到的摄像头数据转换为BMP格式,以便在本地存储或者上传到云端。 4. 图像处理算法:为了将摄像头数据转换成BMP格式,项目可能包含了图像处理算法,例如像素格式转换、色彩空间转换等。这些...

    按压缩比将BMP转换为JPG

    而JPG是一种有损压缩格式,主要用于照片或色彩丰富的图像,通过牺牲部分图像质量来换取更小的文件大小,适合网络传输和存储。 在Delphi 7中,我们可以使用VCL库中的TImage组件来加载、显示和处理图像。这个组件支持...

    png bmp icon图标素材

    尽管BMP文件不适用于网络传输,但在本地存储和编辑高质量图标时很有用。 ICON则是专门的图标文件格式,常用于Windows系统中的应用程序图标。它包含多个不同尺寸和颜色深度的图像,以适应不同的显示需求。例如,当...

    将GIF文件转换成BMP文件的例子(5KB)...

    GIF是一种广泛使用的网络图像格式,支持动画和透明度,而BMP是Windows操作系统中的标准位图格式,通常用于存储非压缩的图像数据。 首先,我们要理解GIF和BMP文件的结构差异。GIF文件使用LZW压缩算法,包含多帧图像...

    PNG GIF JPG BMP转换成ICO工具

    使用这样的工具,用户可以轻松地将个人设计的PNG、GIF、JPG或BMP图片调整为适合各种屏幕尺寸的图标,而无需逐一手动修改。 转换过程通常涉及以下步骤: 1. 选择源图像:用户需要提供要转换的PNG、GIF、JPG或BMP文件...

    http2bmp

    5. **保存文件**:最后,程序将生成的BMP图像文件保存到本地,供用户查看或进一步处理。 http2bmp的实现虽然简单,但它展示了VB在处理网络请求和图形渲染方面的基本能力。对于初学者来说,这是一个很好的学习项目,...

    从网络上获取图片

    10. **存储与备份**:下载的图片需要妥善存储,可以本地保存,也可以上传至云存储服务。定期备份有助于防止数据丢失。 以上是“从网络上获取图片”这一主题所涉及的主要IT知识点,涵盖了网络协议、网页渲染、图片...

    计算机软件-商业源码-解决BMP和JPE图像在数据库储存和读出.zip

    这两种格式都是常见的图像文件格式,BMP无损且体积大,而JPEG则是广泛使用的有损压缩格式,适合网络传输和存储。 首先,让我们详细讨论一下在数据库中存储图像的问题。传统的数据库设计通常涉及存储文本、数字和...

    易语言字节集与图片互转

    在易语言编程环境中,字节集与图片的互转是一个常见的操作,特别是在处理网络数据传输、文件存储或图像处理时。下面将详细解释这个过程,以及如何使用易语言实现这一功能。 字节集(Byte Array)是编程中用来存储二...

    JPG BMP GIF转为ICO的ICO转换器

    这使得BMP文件具有高保真度,但不适合存储大容量的图像。 3. **GIF**:GIF(Graphics Interchange Format)是一种支持透明度和动画的无损压缩格式。它限制了色彩数量(最多256色),适合用于简单的图形、文字和动态...

    URL2BMP 1.03 简体中文.rar

    3. **使用方法**:解释如何在软件中输入网址,设置输出的图像参数(如分辨率、质量等),以及如何保存生成的BMP图片。 4. **注意事项**:可能包括对网络连接的要求、兼容性问题、权限设置等方面的提醒。 5. **常见...

    易语言字节集与图片互换

    在易语言中处理字节集与图片的互换是一项常见的任务,尤其是在数据存储、网络传输或者图像处理等领域。本篇文章将详细探讨如何在易语言中实现这一功能。 首先,我们需要理解“字节集”。字节集是易语言中用来存储一...

    所有文档PDF、JPG、BMP等文件格式转换器!

    JPG是常用的图片格式,适合存储照片和复杂图像,因为它采用了有损压缩,能减小文件大小。 BMP(Bitmap)是另一种图像文件格式,它不进行任何压缩,因此通常文件较大,但能提供无损的质量。在某些情况下,如需要无损...

Global site tag (gtag.js) - Google Analytics