gpt4 book ai didi

C# TIFF 位智能检查

转载 作者:行者123 更新时间:2023-11-30 12:35:09 30 4
gpt4 key购买 nike

我正在尝试确定 1BPP 索引的 TIFF 图像使用的是白色像素还是黑色像素。为了检查我的代码是否正确,我让应用程序将它处理过的相同图像绘制到新图像上。这是我注意到一些问题的时候,我一直在绞尽脑汁试图解决这个问题。

我很确定这与我的按位检查有关!

原图

origninal image  A

处理过的图像

enter image description here

测试工程可在http://www.unclickable.net/code/tiffTest.zip下载
不安全 { //翻转起点

                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,255));
}

}
else
{
if (!lowisWhite)
{

image1.SetPixel((xm + Z), y, Color.FromArgb(0, 255,255, 255));
}
}

}

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


image1.SetPixel((xm + Z), y, Color.FromArgb(0, 255, 255, 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, 0, 0));
else
image1.SetPixel((x), y, Color.FromArgb(0, 255, 255, 255));
}
tiffSource.UnlockBits(d);
image1.Save("c:\\temp\\out.jpg");
}
}
}

关于C# TIFF 位智能检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6128855/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com