none
c# 打开tiff格式的灰度影像 RRS feed

答案

  • 你好!
         可以参考一下这里,希望对你有帮助:
    http://www.cnblogs.com/sunbingzibo/archive/2008/09/11/1289260.html
    周雪峰
    2009年9月25日 11:01
    版主
  • 你好!
         可以参考一下这里,希望对你有帮助:
    http://www.cnblogs.com/sunbingzibo/archive/2008/09/11/1289260.html
    周雪峰

    灰度化一幅图像就是将图像的色彩信息全部丢掉,将24位的位图信息,用8位来表示,灰度图共有256级灰度等级,也就是将24位位图的一点如(255,255,255)转换成255,所以R,G,B三个值所乘的系数和为1
    用伪语句可以表示如下

    public bitmap GrayScal(bitmap orgbmp)
    {
        建立一个与原图片等大的8位的图片
        取出原图像中的每一个点
        新图像的点=原图像点的红色量*系数1+绿色量*系数2+黄色量*系统3
        返回新图像
    }






    /// <summary>
        
    /// 对图像进行点运算,
        
    /// </summary>
        public class PointTrans
        {
            
    private readonly double cb;
            
    private readonly double cg;
            
    private readonly double cr;

            
    /// <summary>
            
    /// 做点运算,要给每一个偏量,做一下设置,比如做图像的灰度图就需要现设置
            
    /// </summary>
            
    /// <param name="cr"></param>
            
    /// <param name="cg"></param>
            
    /// <param name="cb"></param>
            public PointTrans(double cr, double cg, double cb)
            {
                
    this.cr = cr;
                
    this.cg = cg;
                
    this.cb = cb;
            }

            
    public  Bitmap GrayScaleBmp(Bitmap orgData)
            {
                
    int bmpWidth = orgData.Width, bmpHeight = orgData.Height;
                Bitmap destData 
    = ImageTools.CreateGrayscaleImage(bmpWidth, bmpHeight);
                Rectangle bmpRect
    =new Rectangle(0,0,bmpWidth,bmpHeight);

                BitmapData orgBmpData 
    = orgData.LockBits(bmpRect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

                BitmapData destBmpData 
    = destData.LockBits(bmpRect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
                ProcessFilter(orgBmpData,destBmpData);

                orgData.UnlockBits(orgBmpData);
                destData.UnlockBits(destBmpData);
                
    return destData;

            }


            
    protected unsafe void ProcessFilter(BitmapData sourceData, BitmapData destinationData)
            {
                
    // get width and height
                int width = sourceData.Width;
                
    int height = sourceData.Height;

                
    int srcOffset = sourceData.Stride - width*3;
                
    int dstOffset = destinationData.Stride - width;

                
    // do the job
                byte* src = (byte*) sourceData.Scan0.ToPointer();
                
    byte* dst = (byte*) destinationData.Scan0.ToPointer();

                
    // for each line
                for (int y = 0; y < height; y++)
                {
                    
    // for each pixel
                    for (int x = 0; x < width; x++, src += 3, dst++)
                    {
                        
    *dst = (byte) (cr*src[RGB.R] + cg*src[RGB.G] + cb*src[RGB.B]);
                    }
                    src 
    += srcOffset;
                    dst 
    += dstOffset;
                }
            }


        }
    以上内容取自于http://www.cnblogs.com/sunbingzibo/archive/2008/09/11/1289260.html


    擅长领域 Windows Desktop Experience, Media Center, Virtual Machine, Windows System & Performance
    2009年9月25日 12:06

全部回复

  • 你好!
         可以参考一下这里,希望对你有帮助:
    http://www.cnblogs.com/sunbingzibo/archive/2008/09/11/1289260.html
    周雪峰
    2009年9月25日 11:01
    版主
  • 你好!
         可以参考一下这里,希望对你有帮助:
    http://www.cnblogs.com/sunbingzibo/archive/2008/09/11/1289260.html
    周雪峰

    灰度化一幅图像就是将图像的色彩信息全部丢掉,将24位的位图信息,用8位来表示,灰度图共有256级灰度等级,也就是将24位位图的一点如(255,255,255)转换成255,所以R,G,B三个值所乘的系数和为1
    用伪语句可以表示如下

    public bitmap GrayScal(bitmap orgbmp)
    {
        建立一个与原图片等大的8位的图片
        取出原图像中的每一个点
        新图像的点=原图像点的红色量*系数1+绿色量*系数2+黄色量*系统3
        返回新图像
    }






    /// <summary>
        
    /// 对图像进行点运算,
        
    /// </summary>
        public class PointTrans
        {
            
    private readonly double cb;
            
    private readonly double cg;
            
    private readonly double cr;

            
    /// <summary>
            
    /// 做点运算,要给每一个偏量,做一下设置,比如做图像的灰度图就需要现设置
            
    /// </summary>
            
    /// <param name="cr"></param>
            
    /// <param name="cg"></param>
            
    /// <param name="cb"></param>
            public PointTrans(double cr, double cg, double cb)
            {
                
    this.cr = cr;
                
    this.cg = cg;
                
    this.cb = cb;
            }

            
    public  Bitmap GrayScaleBmp(Bitmap orgData)
            {
                
    int bmpWidth = orgData.Width, bmpHeight = orgData.Height;
                Bitmap destData 
    = ImageTools.CreateGrayscaleImage(bmpWidth, bmpHeight);
                Rectangle bmpRect
    =new Rectangle(0,0,bmpWidth,bmpHeight);

                BitmapData orgBmpData 
    = orgData.LockBits(bmpRect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

                BitmapData destBmpData 
    = destData.LockBits(bmpRect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
                ProcessFilter(orgBmpData,destBmpData);

                orgData.UnlockBits(orgBmpData);
                destData.UnlockBits(destBmpData);
                
    return destData;

            }


            
    protected unsafe void ProcessFilter(BitmapData sourceData, BitmapData destinationData)
            {
                
    // get width and height
                int width = sourceData.Width;
                
    int height = sourceData.Height;

                
    int srcOffset = sourceData.Stride - width*3;
                
    int dstOffset = destinationData.Stride - width;

                
    // do the job
                byte* src = (byte*) sourceData.Scan0.ToPointer();
                
    byte* dst = (byte*) destinationData.Scan0.ToPointer();

                
    // for each line
                for (int y = 0; y < height; y++)
                {
                    
    // for each pixel
                    for (int x = 0; x < width; x++, src += 3, dst++)
                    {
                        
    *dst = (byte) (cr*src[RGB.R] + cg*src[RGB.G] + cb*src[RGB.B]);
                    }
                    src 
    += srcOffset;
                    dst 
    += dstOffset;
                }
            }


        }
    以上内容取自于http://www.cnblogs.com/sunbingzibo/archive/2008/09/11/1289260.html


    擅长领域 Windows Desktop Experience, Media Center, Virtual Machine, Windows System & Performance
    2009年9月25日 12:06
  • 我的是扫描成灰度图像tiff格式的,想把它转换成多页tiff的,可是用bitmap 打不开灰度影像,导致无法转换

    2009年9月26日 12:32
  • 各位仁兄:谁帮忙解决这个问题了,我是没办法了

    2009年9月27日 2:21
  • c#中咋样打开压缩格式是jpeg的tif图像,我想让他变成多页tiff,可是现在就是想打开都不行
    2009年9月27日 2:50
  • 位图由图形图像及其属性的像素数据组成。可使用许多标准格式将位图保存到文件中。GDI+ 支持下列文件格式:BMP、GIF、EXIG、JPG、PNG 和 TIFF。不知道为什么你的Tiff图片不能够被打开,你是否可以使用MSPaint.EXE打开图片呢。


    Best regards,
    Riquel
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年9月28日 11:27
    版主