我已经成功生成了一个BMP文件。 (尽管如此,我仍然在调整格式上的一些更改)。我用PictureBox创建了一个winform。在我的最后一个问题之后,我现在可以保存文件,但是现在位图无法显示在PictureBox中。这发生在我更改了调色板并跟随this answer 以将颜色的Alpha设置为0
之后我的bmp像this answer中所述是单色的(我想知道是否有更简单的方法)
我的代码是
private void btnNameUsage_Click(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(width, height);
// Bitmap bmp = new Bitmap(width, height, PixelFormat.Format1bppIndexed); //This does not work
bmp.SetResolution(300.0F, 300.0F);
string name = "Hello how are you";
string date = DateTime.Now.Date.ToString();
using (Graphics thegraphics = Graphics.FromImage(bmp))
{
string complete = date + "\n" + name ;
thegraphics.FillRectangle(Brushes.White, 0, 0, bmp.Width, bmp.Height);
using (Font font1 = new Font("Arial", 24, FontStyle.Regular, GraphicsUnit.Pixel))
using (var sf = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center,
})
{
thegraphics.DrawString(complete, font1, Brushes.Black, new Rectangle(0, 0, bmp.Width, bmp.Height), sf);
}
}
//add
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format1bppIndexed);
Bitmap newBitmap = new Bitmap(width, height, bmpData.Stride, PixelFormat.Format1bppIndexed, bmpData.Scan0);
newBitmap.SetResolution(300.0F, 300.0F);
//we modify the palette THIS MAKES THE BMP NOT SHOWN IN PIT BOX
ColorPalette palette = newBitmap.Palette;
palette.Entries[0] = black; //black is a type Color
palette.Entries[1] = white; //white is a type Color
newBitmap.Palette = palette;
picBoxImage.Image = newBitmap; //THIS fails
newBitmap.Save(@"theImage.bmp", ImageFormat.Bmp); //This works!
}
我必须澄清,默认情况下生成的调色板是(RGBA)黑色:000000FF和白色:FFFFFFFF(使用此调色板,我可以在图片框中看到bmp),但是我将更改为黑色:00000000和白色:FFFFFF00 (如您所见,仅A组件已更改)
黑白变量
Color black = new Color();
Color white = new Color();
white = Color.FromArgb(0, 255, 255, 255); //the 0 is alpha zero
black = Color.FromArgb(0, 0, 0, 0); //the first 0 is alpha zero
我想知道为什么它没有显示。
作为附带问题,如何更改DIB标头中的“重要颜色数”?
编辑: 我尝试了alpha设置(例如128),我只能看到图片的亮色略少(如灰色)。 这仅在显示bmp时发生。保存的文件是正确的黑白
picturebox和alpha之间有什么关系...
答案 0 :(得分:0)
Alpha表示颜色的不透明度。 0表示颜色是完全透明的,即您将只看到画布/背景,128表示颜色是50%的透明意味着您将看到相同数量的颜色和背景,255表示完全不透明/零透明度意味着您将仅看到颜色。
简而言之,白色是“ FFFFFFFF”,黑色是“ FF000000”。
如果要通过其RGB分量指定颜色,请使用带有三个参数的FromArgb方法,这三个参数会将Alpha通道隐式设置为255。