各位大哥。我在使用Bitmap.save()的过程遇到了下面的问题。
我在保存之前,获取了一个8×8块像素的RGB分量,用一个TextBox输出以待观察。
然后使用Bitmap.save(url)保存。
保存后新建一个new Bitmap(url),然后获取之前那个8×8块的RGB分量。发现和之前的不一样。相邻像素值差别大的变平滑了。
难道Bitmap.save()保存过程中会自动优化图像?但是我要获取的是保存之前的值,这可怎么办啊。

解决方案 »

  1.   

    Save的重载方法里应该有ImageCodecInfo,EncoderParameters的设置吧。可以通过
    EncoderParameters eps = new EncoderParameters(1);
    EncoderParameter ep = new EncoderParameter(enc, 90L);//质量等级90%  
    eps.Param[0] = ep;
    来设置保存的质量等级。
      

  2.   

    Bitmap.Save(filename,ImageFormat.Bmp)应该不会..
    如果使用Bitmap.Save(FileName,ImageFormat.Jpeg); 这个会的因为JPEG不是无损压缩的. 
    GIF 只有256色..这个问题取决你保存的图形格式.
      

  3.   

    使用这个重载形式
    public void Save(
    Stream stream,
    ImageFormat format
    )
    Bitmap.Save(url, ImageFormat.Bmp)
      

  4.   

    补充:
    System.Drawing.Imaging.Encoder enc = System.Drawing.Imaging.Encoder.Quality;//设置保存质量  
    上面的enc是这样的
      

  5.   

    谢谢楼上的大哥,因为我做的是数字水印,经DCT变换后改变了系数,反变换回来之后RGB分量是改变了的。
    那如果我需要改变之后的RGB分量保存后一丁点都不要更改,按原值保存,质量等级是不是得设置成100%啊?
      

  6.   

    我之前保存的格式是JPEG,用BMP试下看
      

  7.   


    可能你的水印抗干扰性不好。对于有一定尺寸的图像(只有8*8作为载体当然信息量太小),好的数字水印应该经得起jpeg的量化和变换。