Пользователь,
, похоже, все в порядке, код ниже. Запомните это на всю оставшуюся жизнь: если вы надеетесь получить какой-либо ответ от доски обсуждений, код должен быть пригодным для резки и вставки со всеми использованием и объявлениями!
Теперь я невключите оставшуюся часть частичного класса, потому что он автоматически генерируется c # при запуске проекта.Вы заставляете людей прыгать через обручи, они не будут работать на вас.
Я не смог найти странную функцию GetScanLine.Если это из другой библиотеки, что это такое и какой самый быстрый способ, которым я мог бы проверить это?
Перед запуском я сохранил ваше изображение в c: \ temp \ bw.tif, убедившись, что в MS Paint он установлен как 1bpp.Я также установил точку останова после загрузки файла, чтобы доказать, что свойство .ImageFormat было 1bpp.Результат отображается в c: \ temp \ out.jpg.
Похоже, что существует несколько причин, по которым исходный файл не удался.То, как вы делаете х * 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");
}
}
}