java-I/O-bmp-反色,单原色输出

java-I/O-bmp-反色,单原色输出

BMP

BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图dib(device-independent bitmap)格式,目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.rle作扩展名)。

格式

Bmp图片格式组成部分:bmp文件头(14 bytes) + 位图信息头(40 bytes) + 调色板(由颜色索引数决定) + 位图数据(由图像尺寸决定)

颜色

这里采用32位bmp,54 bytes后,每四个字节表示一个像素点,前三个字节表示颜色,以此是红绿蓝

package Input_And_Out;

import java.io.*;

public class Jpeg {

    public static void main(String[] args) {
        BufferedInputStream bufferedInputStream = null;
        BufferedOutputStream bufferedOutputStream1 = null,bufferedOutputStream2 = null,bufferedOutputStream3 = null,bufferedOutputStream4 = null;
        try {

             bufferedInputStream=new BufferedInputStream(new FileInputStream("src\\Input_And_Out\\tiger.bmp"));
             bufferedOutputStream1=new BufferedOutputStream(new FileOutputStream("src\\Input_And_Out\\tiger1.bmp"));
            bufferedOutputStream2=new BufferedOutputStream(new FileOutputStream("src\\Input_And_Out\\tiger2.bmp"));
            bufferedOutputStream3=new BufferedOutputStream(new FileOutputStream("src\\Input_And_Out\\tiger3.bmp"));
            bufferedOutputStream4=new BufferedOutputStream(new FileOutputStream("src\\Input_And_Out\\tiger4.bmp"));

            int count,cursor = 0;
            while ((count = bufferedInputStream.read()) != -1) {
                if (cursor > 54) {
                    //直接读四个,表示颜色
                    int [] b=new int[4];
                    b[0]=count;
                    for(int i=1;i<b.length;i++)
                        b[i]= bufferedInputStream.read();

                    for(int i=0;i<b.length;i++){
                        if(i==0) {
                            bufferedOutputStream2.write(b[i]);
                            bufferedOutputStream3.write(0);
                            bufferedOutputStream4.write(0);
                            bufferedOutputStream1.write(0xff - b[i]);

                        }else if(i==1){
                            bufferedOutputStream2.write(0);
                            bufferedOutputStream3.write(b[i]);
                            bufferedOutputStream4.write(0);
                            bufferedOutputStream1.write(0xff - b[i]);

                        }else if(i==2){
                            bufferedOutputStream2.write(0);
                            bufferedOutputStream3.write(0);
                            bufferedOutputStream4.write(b[i]);
                            bufferedOutputStream1.write(0xff - b[i]);

                        }else{
                            bufferedOutputStream2.write(b[i]);
                            bufferedOutputStream3.write(b[i]);
                            bufferedOutputStream4.write(b[i]);
                            bufferedOutputStream1.write(0xff - b[i]);
                        }
                    }
                } else {
                    bufferedOutputStream1.write(count);
                    bufferedOutputStream2.write(count);
                    bufferedOutputStream3.write(count);
                    bufferedOutputStream4.write(count);
                }
                cursor++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                assert bufferedInputStream != null;
                bufferedInputStream.close();
                assert bufferedOutputStream1 != null;
                bufferedOutputStream1.close();
                assert bufferedOutputStream2 != null;
                bufferedOutputStream2.close();
                assert bufferedOutputStream3 != null;
                bufferedOutputStream3.close();
                assert bufferedOutputStream4 != null;
                bufferedOutputStream4.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

原图

在这里插入图片描述

输出图片

  1. 反色,二进制码取反
    在这里插入图片描述

  2. 单绿色,保留第一字节颜色,其余置0
    在这里插入图片描述

  3. 单红色,保留第二字节颜色,其余置0
    在这里插入图片描述

  4. 单蓝色,保留第三字节颜色,其余置0
    在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CaoPengCheng&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值