这是我的位图创建代码
public static Bitmap Plot24(ref byte[] bufferArray, int lengthOfBufferArray, String fileName)
{
int position = 0;
int rows = (int)Math.Ceiling((double)lengthOfBufferArray / (3*columns) );
Bitmap b = new Bitmap(columns , rows, PixelFormat.Format24bppRgb);
BitmapData bmd = b.LockBits(new Rectangle(0, 0, columns , rows), ImageLockMode.ReadWrite, b.PixelFormat);
unsafe
{
for (int j = 0; j < rows; j++)
{
byte* row = (byte*)bmd.Scan0 + ((j * bmd.Stride) );
for (int i = 0; i < columns*3; i+=3)
{
if (position < lengthOfBufferArray)
{
try
{
row[i+2] = bufferArray[position];
position++;
if (position < lengthOfBufferArray)
{
row[i+1] = bufferArray[position];
position++;
}
else
{
break;
}
if (position < lengthOfBufferArray)
{
row[i] = bufferArray[position];
position++;
}
else
{
break;
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
b.UnlockBits(bmd);
return b;
}
}
这就是我保存返回位图的方法
b.Save(outputFilename, ImageFormat.Bmp);
当我在bufferArray中拥有所有FF十六进制时,仍然是白色像素不是白色。
当我在bufferArray中有随机值时,其他颜色看起来也会被冲走。
如何保存在正常亮度级别?
答案 0 :(得分:0)
我测试了你的示例代码,它运行得很好。我在你的底部有一段摘录样本,对方法参数略有修改。
您能否在问题中提供有关如何使用Plot24方法的样本?也许问题出在那里。
void Main()
{
int rows = 100;
int columns = 100;
var random = new Random(DateTime.Now.Ticks.GetHashCode());
byte[] bytes = Enumerable
.Range(0, columns * rows)
// White
.SelectMany(i => new[] { (byte)0xFF, (byte)0xFF, (byte)0xFF, } )
// Random
/*.SelectMany(i =>
{
byte[] buffer = new byte[3];
random.NextBytes(buffer);
return buffer;
})*/
.ToArray();
using (var bm = Plot24(ref bytes, columns))
{
bm.Save(@"c:\test.bmp", ImageFormat.Bmp);
}
}
public static Bitmap Plot24(ref byte[] bufferArray, int columns)
{
int position = 0;
int lengthOfBufferArray = bufferArray.Length;
int rows = (int)Math.Ceiling((double)lengthOfBufferArray / (3*columns) );
// ... the rest of your code is just fine