黑白图像压缩

【题目描述】
选修基础生物基因学的时候,小可可在家里做了一次图像学试验.她知道:整个图像其实就是若干个图像点(称作像素)的序列,假定序列中像素的个数总是8的倍数,于是每八个像素可以转换成一个叫做字节的数,从而这个表示图像的像素序列就被转换成了字节的序列.所谓的字节就是一个八位的二进制数(当然,为了便于书写,人们经常用它的十进制形式来表示).这八个像素从前向后依次对应于字节从高位到低位的八个位,用0来表示白色像素,1来表示黑色像素.这种表示方法叫做位图法.例如字节序列210,0,255表示了8*3=24个像素,由于对应的二进制形式是11010010,00000000,11111111,所以这24个像素的颜色依次是黑,黑,白,黑,白,白,黑,白,白,白,白,白,白,白,白,白,黑,黑,黑,黑,黑,黑,黑,黑。
小可可想:其实图像中存在着很多连续的同色像素段,也许换一种方式表达图像能够减少图像的数据量.她的思路是:把像素按照颜色分成若干个片段,同一个片段中各像素颜色相同,且连续的同色像素都在同一个片段中.同时已知每个片段的最大长度小于128.每一个像素片段都是用一个二进制字节量来表示,最高位表示片段中像素的颜色,而低七位表示片段中像素的数目.注意:不存在长度为0的像素片段。这种表示法叫做像素片段法。
例如位图表示法的字节序列210,0,255对应的像素序列可以分成七个片段,分别是:11,0,1,00,1,000000000,11111111。如果用像素片段法来表示的话,二进制字节序列应该写成10000010,00000001,10000001,00000010,10000001,00001001,10001000,而其对应于十进制字节序列就是130,1,129,2,129,9,136。
像素片段法是否能有效地减少图像的数据存储量呢?小可可不知道如何用数学的方法加以证明,于是决心对手头上的图像做些试验,看看该方法是否真的有效。请你编写程序完成图像信息的转换,以协助小可可完成这项试验。
【输入格式】
输入为一行,存放了一个图像的信息.第一个数是正整数n(n<=80000),表明该图像有个像素.随后有n/8个十进制形式的字节量,表示该图像的位图信息.相邻数之间用一个空白字符隔开.
【输出格式】
输出以像素片段表示法表示的图像信息,各个数都以十进制的形式出现,相邻数之间用一个空白字符隔开.
【样例输入】
24 210 0 255
【样例输出】
130 1 129 2 129 9 136
【分析】
题目描述看上去很长,但是题意还是很清晰的。
把读入的十进制数统统转换为二进制数,然后就可以直接比较了。注意细节。

#include<cstdio>
int a[80000],b[80000];
int main()
{
  int n,k=0,lab=1;
  scanf("%d",&n);
    n/=8;
  for (int i=0;i<n;i++) scanf("%d",&a[i]);
  for (int i=0;i<n;i++)
    for (int j=7;j>=0;j--){
      k=i*8+j;
      b[k]=a[i]%2;
      a[i]/=2;
        }
    int i;
  for (i=1;i<n*8;i++)
    if (b[i]!=b[i-1]){
      if (b[i-1]==1) printf("%d ",lab+128); else printf("%d ",lab);
      lab=1;
    }
        else lab++;
  if (b[i-1]==1) printf("%d \n",lab+128); else printf("%d \n",lab);
  return 0;
}

转载于:https://www.cnblogs.com/JRX2015U43/p/6533461.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板中拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器中打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符中运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 库。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其库来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值