`

JAVA版PCX图象的RLE算法压缩与解压缩

    博客分类:
  • JAVA
阅读更多

丰富JE的博客,把上大学时候的一个算法,搬过来,大概是2007年07月写的

 

/*闲来无事,写个RLE程序玩玩*/ 
package com.homework.comperssion; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
public class RLE { 

public void compress(String source,String dis){//压缩 source源文件,dis目标文件 
  try { 
         FileInputStream in = new FileInputStream(source); 
         FileOutputStream out=new FileOutputStream(dis); 
         int next = 0; 
         int count=in.read();//取第一个字节 
         while ((next = in.read()) >= 0){//当文件没有结束时执行 
          int counter=1;//计重复的次数 
          if(count==next){//如果有相同的 
           counter++; 
           while(next==(count=in.read())){//计算重复的次数 
            counter++; 
           } 
           while(counter>=63){//重复次数大于63的情况 
            out.write(255);//63个(192+63) 
            out.write(next); 
            //System.out.println("大于63的情况"+(0xc0+63)+" "+count); 
            counter-=63;//减去处理的63个字节 
           } 
           if(counter>1){//处理剩下的字节 
            out.write(0xc0+counter); 
            out.write(next); 
            //System.out.println("重复剩余的"+(0xc0+counter)+" "+counter); 
           } 
           } 
          else{ 
           if(count<=0xc0){//不重复小于192的情况 
            //System.out.println(count); 
            out.write(count); 
            count=next; 
           } 
           else{//不重复大于192的情况 
            out.write(0xc1); 
            out.write(count); 
            count=next; 
            //System.out.println("0xc1的"+(0xc1)+count);             
           } 
          } 
         } 
         //处理最后一个字节 
         if(count<=0xc0){ 
          //System.out.println(count); 
          out.write(count); 
         } 
         else{ 
          out.write(0xc1); 
          out.write(count); 
          //System.out.println("0xc1的"+(0xc1)+count);             
         } 
         in.close();//关闭输入流 
         out.close();//关闭输出流 
     } catch (IOException e) { 
     } 
} 
public void decompress(String source,String dis){//解压缩  source源文件,dis目标文件 
  try{ 
    FileInputStream in = new FileInputStream(source); 
       FileOutputStream out=new FileOutputStream(dis); 
       int count=0; 
       while((count=in.read()) >=0){ 
        if(count==0xc1) 
         out.write(in.read()); 
        else if(count<=0xc0){ 
         out.write(count); 
        } 
        else if(count>0xc1){ 
         int next=in.read(); 
         for(int i=0;i<(count-0xc0);i++) 
          out.write(next); 
        } 
       } 
  }catch(Exception e){ 
   e.printStackTrace(); 
  } 
} 
public static void main(String[] args) { 
  // TODO Auto-generated method stub   
  new RLE().compress("E:\\123.BMP", "E:\\456.cjj");//压缩到456.cjj ,文件后缀名随便取 
  new RLE().decompress("E:\\456.cjj", "E:\\789.BMP");//从456.cjj 解压到789.BMP 
} 
} 

 

呵呵,两年前的作品……想想那时候和老婆混到一起没多久呢?想起来蛮怀恋的。

3
0
分享到:
评论
1 楼 a312983516 2015-03-27  
我有个问题啊,你是怎么处理255的呢,我跟断点明明看到有个255进去了,可是出来时候没有。。。

相关推荐

    基于PCX算法图像无失真压缩PCX_Coding.rar

    标题中的“基于PCX算法图像无失真压缩PCX_Coding.rar”暗示了这是一个关于使用PCX算法实现图像无损压缩的项目或教程资源。PCX(Paintbrush File Format)是一种早期的图形文件格式,主要由DOS时代的画图程序ZSoft ...

    VC 压缩算法:LZW和RLE用法测试.rar

    VC 压缩算法:LZW和RLE用法测试,这个源码主要是演示LZW和RLE压缩算法是如何使用的,是一个用法的测试程序,... RLE 压缩算法(PCX, TGA图像),Demo源码未经过严格测试,请先保存待压缩文件再进行压缩测试。作者:付黎。

    Java pcx, tga(targa) image decoder

    在给定的压缩包文件中,"Java pcx, tga(targa) image decoder"是一个用于解码PCX和TGA图像格式的Java程序。这两种格式在现代计算机图像处理中可能不那么常见,但在早期的计算机图形应用中却非常流行。 PCX...

    纯C写的PCX图象文件读取、修改程序代码

    综上所述,纯C编写的PCX图象文件读取、修改程序代码涉及到C语言的基础知识、文件操作、图像处理算法、颜色编码和解码等多个方面,开发者需要具备扎实的C语言基础和图像处理理论。在实际编写这样的程序时,需要对PCX...

    PCX压缩实现代码

    这段代码通过一种简单的压缩算法提高了PCX图像文件的存储效率,特别适用于资源有限的系统环境。 #### 二、关键函数分析 本节将深入探讨`encode2`函数,它是实现PCX压缩的核心部分。 ##### 函数定义 ```c SInt32 ...

    PCX图片解码

    PCX文件可以使用无损的RLE(Run-Length Encoding)压缩算法,该算法通过记录连续相同像素的数量来减少数据量。解码时需要识别并展开这些压缩序列。 解码PCX图片的过程大致如下: 1. **读取文件头**:首先,需要...

    Viewing PCX files查看PCX文件(69KB)

    PCX文件还可能包含RLE(Run-Length Encoding)压缩,这是一种简单的无损压缩算法,通过记录连续相同像素的数量来减少文件大小。 描述中的“69KB”可能是指出示例文件的大小,这在处理图像文件时是一个相对较小的...

    Bitmap-a-PCX.rar_pcx

    标题 "Bitmap-a-PCX.rar_pcx" 暗示了这个压缩包包含了与Bitmap(BMP)和PCX图像格式相关的程序代码,适合初学者入门学习。让我们深入了解一下这两种图像格式及其处理的基础知识。 BMP(Bitmap)是微软公司开发的一...

    Pcx C code help someone to open the pcx files.

    4. **解压缩像素数据**:根据RLE或其他压缩算法,解压缩像素数据。这通常涉及循环读取数据块,识别压缩模式,然后扩展为原始像素值。 5. **分配内存并存储像素**:根据解析出的图像尺寸,分配足够大的内存来存储...

    pcxl-c_DOS_pcx_

    PCXSHOW.C可能包含了RLE解压缩的实现。 为了在DOS的有限图形环境中显示图像,程序可能需要与BIOS(基本输入输出系统)或VGA(视频图形阵列)硬件进行交互,使用低级图形模式设置,比如调用INT 10H BIOS中断来改变...

    基于java jimi包的图片格式转换

    在Java编程环境中,进行图像处理是一项常见的任务,其中包括图片格式的转换。本篇文章将深入探讨如何利用Java的Jimi包来实现图片格式的转换,包括从JPG和GIF格式转换为PNG和PSD格式。Jimi是一个强大的Java图像处理库...

    pcx显示C语言程序.rar

    中断0x10通常与VGA(Video Graphics Array)图形模式相关,允许程序在屏幕上画点、线和矩形,甚至显示位图。在DOS程序中,直接使用这种中断可以直接控制显卡,从而高效地显示图像,但这种方式不适用于Windows或现代...

    可以打开各种图象文件.rar_7MA_pcx_图像

    标题中的“可以打开各种图象文件.rar_7MA_pcx_图像”暗示了这是一个与图像处理相关的压缩包,其中可能包含一个或多个程序,能够支持多种图像格式的查看或编辑。7MA通常指的是7-Zip的压缩格式,而pcx是PCX图像格式的...

    实现256色PCX文件解码的源程序.rar_PCX Visual

    3. **解码图像数据**:PCX文件的图像数据使用RLE(Run-Length Encoding)压缩算法,这是一种简单的无损压缩方法。它通过记录连续相同像素的数量来减少数据量。解码器需要识别并处理RLE编码,将压缩的数据还原为原始...

    RGB静态图象转换技术与实现①② (1999年)

    随着计算机图形显示设备各项技术指标的提高,各种应用软件中镶嵌...针对这一原始资料获取方式,研究了摄象信息的数字化,RGB数据图象向PCX标准图象格式的转换,PCX图象的压缩与解压缩以及压缩图象的存贮管理等内容.

    JPEG压缩编码算法

    与常见的图像文件格式(如GIF、TIFF、PCX等)相比,JPEG在相同的图像质量下拥有更高的压缩比。 ##### 1. 压缩原理 JPEG压缩算法主要包括三个步骤:变换、量化和编码。 - **变换**:首先将图像转换到适合压缩的域...

    PCX_C_c++pcx_

    标题中的"PCX_C_c++pcx_"暗示了这是一个关于使用C++处理PCX图像格式的库或程序。PCX是Zsoft Corporation开发的一种位图图像文件格式,常见于DOS时代,用于存储和处理图形图像。这个压缩包包含了一系列与处理PCX格式...

    PCX924E64B驱动

    **标题与描述解析** 标题"PCX924E64B驱动"指的是针对特定硬件设备的驱动程序,这里的硬件设备是PCX924E64B。这通常是一款声卡,因为标签中提到了"法国追梦声卡驱动"。法国追梦(Digigram)是一家专注于专业音频解决...

    图像处理(PCX图档)

    程式分为两部分,图片部分:对PCX文档的解码,包含灰阶,二值化,直方图均衡化、规定化、对比拉伸,碎形压缩,多种滤波器实现,旋转,缩放,位图,浮水印...等功能(这些功能是不局限于PCX档,可以移植)。影像部分:...

    PCX操作箱及辅助装置.pdf

    PCX操作箱及辅助装置是指应用于电力系统中的操作回路及辅助回路,主要用途是对断路器进行操作,监视其运行状态,完成保护装置与断路器的联系和配合。该装置可以实现电压互感器输出交流电压的切换及并列功能,并可...

Global site tag (gtag.js) - Google Analytics