Я успешно сгенерировал файл BMP. (Я все еще настраиваю некоторые изменения в формате, который я должен сделать, хотя). Я создал winform с PictureBox. После моего последнего вопроса я теперь могу сохранить файл, но теперь растровое изображение не может быть отображено в PictureBox. Это произошло после того, как я изменил палитру после этого ответа , чтобы установить альфа цветов в 0
Мой BMP монохромный, как преподается в этом ответе (Интересно, может ли быть более простой способ)
Мой код
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 (как видите, только компонент А изменен)
переменные черного и белого цвета
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?
EDIT:
Я экспериментировал с настройкой альфа (например, 128), и я мог видеть картинку только чуть менее яркими цветами (как в сером)
Это происходит только при отображении BMP. Сохраненный файл правильно черно-белый
Какая связь между картинкой и альфа ...