如何解决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 举报,一经查实,本站将立刻删除。