微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#TIFF位明智检查

如何解决C#TIFF位明智检查

| 我正在尝试确定索引1BPP的TIFF图像是使用白色像素还是黑色像素。为了检查我的代码是否正确,我使应用程序将处理的图像绘制到新图像上。这是当我注意到一些问题,并且我想尽办法想出办法。 我很确定这与我的按位检查有关! 原始图像 处理的图像 可以从http://www.unclickable.net/code/tiffTest.zip下载测试项目      不安全的                 {                     // flipStartPoint
                int y;
                for (y = 0; y < tiffSource.Height; y++)
                {
                    var Column = (byte*)tiffSource.GetScanlinePointer(y);
                    int x;
                    for (x = 0; x < (tiffSource.Width / 8); x++)
                    {
                        int xm = x * 8;
                        byte b = Column[xm];


                        if (b > 0)
                        {

                                for (int Z = 0; Z < 8; Z++)
                                {


                                    if (((b & (128 >> Z)) != 0))
                                    {
                                        if (lowisWhite)
                                        {
                                            image1.SetPixel((xm + Z),y,Color.FromArgb(0,255,255));
                                        }

                                    }
                                    else
                                    {
                                        if (!lowisWhite)
                                        {

                                            image1.SetPixel((xm + Z),255));
                                        }
                                    }

                                }

                        }
                        else
                        {
                            if (!lowisWhite)
                            {
                                for (int Z = 0; Z < 8; Z++)
                                {


                                    image1.SetPixel((xm + Z),255));

                                }
                            }
                        }
                    }
                }
            }
    

解决方法

用户, 这似乎可以解决问题,下面的代码。在您的余生中,请记住这一点:如果您希望讨论区有任何回应,则该代码应可剪切且可粘贴,并包含所有使用和声明! 现在,我没有包含其余的部分类,因为它在启动项目时由c#自动生成。您使人们跳过篮球,他们不会为您工作。 我找不到奇怪的GetScanLine函数。如果来自另一个库,那是什么?我可以用它测试的最快方法是什么? 在运行此程序之前,我将图像保存在c:\\ temp \\ bw.tif中,并确保在MS Paint中将其设置为1bpp。在加载文件后,我还设置了一个断点,以证明.ImageFormat属性为1bpp。结果出现在c:\\ temp \\ out.jpg中。 原始文件失败的原因似乎有多种。是否执行x * 8的方式似乎加倍或奇怪。我采用了另一种方法,将x和y直达像素。
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    unsafe 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender,EventArgs e)
        {
            Bitmap tiffSource = new Bitmap(\"c:\\\\temp\\\\bw.tif\");
            Bitmap image1 = new Bitmap(tiffSource.Width,tiffSource.Height);

            BitmapData d = tiffSource.LockBits(
                 new Rectangle(new Point(0,0),tiffSource.Size),ImageLockMode.ReadOnly,tiffSource.PixelFormat);
            for (int y = 0; y < tiffSource.Height; y++)
            {
                byte* Column = (byte*)d.Scan0 + y*d.Stride;

                for (int x = 0; x < (tiffSource.Width ); x++)
                    if ((Column[(int)(x / 8)] & (128 >> (x % 8))) !=0   )
                        image1.SetPixel((x),y,Color.FromArgb(0,0));
                    else
                        image1.SetPixel((x),255,255));
            }
            tiffSource.UnlockBits(d);
            image1.Save(\"c:\\\\temp\\\\out.jpg\");
        }
    }
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?