Saya memiliki fungsi ambang batas yang relatif sederhana yang menggunakan kode tidak aman. Ini berfungsi dengan baik di Windows, namun, di Mono di linux, tidak ada ambang batas yang terjadi. Sulit untuk melakukan debug karena hanya ada di Linux, saya telah memeriksa bitPerPixel sudah benar beserta tinggi h
, lebar w
dan langkah ws
semuanya juga benar.
Apa lagi yang bisa saya lakukan untuk mempersempitnya, atau adakah kesamaan di sini?
public void threshold(Bitmap bmp, int thresh)
{
var bitsPerPixel = Image.GetPixelFormatSize(bmp.PixelFormat) / 8;
BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadOnly, bmp.PixelFormat);
unsafe
{
byte* p = (byte*)(void*)bmData.Scan0.ToPointer();
int h = bmp.Height;
int w = bmp.Width;
int ws = bmData.Stride;
for (int i = 0; i < h; i++)
{
byte* row = &p[i * ws];
for (int j = 0; j < w * bitsPerPixel; j += bitsPerPixel)
{
for (var k = 0; k < bitsPerPixel; k++)
{
row[j + k] = (byte)((row[j + k] > (byte)thresh) ? 255 : 0);
}
}
}
}
bmp.UnlockBits(bmData);
}