if (k % 8 == 7)
  { //一个字节
  br.Write(temp);
  temp = 0;
  }这段的意途是什么?按每行作为一个存储单元?每行结束时为什么没有处理?

解决方案 »

  1.   

    size是点阵类型,如size=16,代表16*16点阵,if (k % 8 == 7)
      { //一个字节
      br.Write(temp);
      temp = 0;
      }
    表示一次扫描一行,如果size=16,则width就为16,一行就占用16位,共两个字节
      

  2.   

    明白了,你贴上来的这个算法有漏洞.如果size不是8的整数倍,就漏掉信息了.从文件中的点阵数据没办法复原成原图。应该在每行结束时,处理一下。
      

  3.   

    比如,size=12时,只保存了前8个点的信息,后4个点丢了。
      

  4.   

    这个我知道,不在我的考虑内容!size=16,却得不到相应的点阵
      

  5.   

    如果是size=8,16,24,32 ... 你贴的代码是正常的。每8个点,保存为一个ascii码,直接打开文件显示没什么意义,所以是乱码。
      

  6.   

    算法可以参考:
    http://www.docin.com/p-40599497.html
      

  7.   

    另外:
    temp += (byte)Math.Pow(2,(size/4 - 1) - k % (size/4));size 是按32计算的 , size/4 是否应该直接使用 8. 如果按8位,晃否应该写死.当然,算法不是唯一的,只要能复原就行.
      

  8.   

    按照点阵原理第一个temp应该是64,第二个是8
      

  9.   

    颜色表示方法:把     if(bmp.GetPixel(k, j)==Color.FromArgb(0,0,0))改成:  if (bmp.GetPixel(k, j) == Color.FromArgb(0, 0, 0, 0))
      

  10.   

    前者是透明的,后者默认不透明,bmp.GetPixel(k, j)和Color.FromArgb(0,0,0) 二者颜色永远不等.