Наличие индикатора в виде изображения, отображаемого в графическом окне просмотра. Индикатор может быть любого цвета, который выбирает пользователь, поэтому мы создали одно изображение с палитрой и изменили определенный цвет в палитре на тот, который пользователь выбирает, используя следующий код.
/// <summary>
/// Copies the image and sets transparency and fill colour of the copy. The image is intended to be a simple filled shape such as a square
/// with the inside all in one colour.
/// </summary>
/// <remarks>Assumes the fill colour to be changed is Red,
/// black is the boundary colour and off white (RGB 233,233,233) is the colour to be made transparent</remarks>
/// <param name="image"></param>
/// <param name="fillColour"></param>
/// <returns></returns>
protected Bitmap CopyWithStyle(Bitmap image, Color fillColour)
{
ColorPalette selectionIndicatorPalette = image.Palette;
int fillColourIndex = selectionIndicatorPalette.IndexOf(Color.Red);
selectionIndicatorPalette.Entries[fillColourIndex] = fillColour;
image.Palette = selectionIndicatorPalette;
Bitmap tempImage = image;
tempImage.MakeTransparent(transparentColour);
return tempImage;
}
Если честно, я не уверен, что это немного глупо и есть какой-то более разумный подход или нет, так что любые мысли там помогут. Однако главная проблема заключается в том, что на Win7 это работает нормально, но в Vista и XP цвет не меняется. Кто-нибудь видел это раньше. Я нашел одну или две статьи, которые предполагают, что между ними есть некоторые различия в ARGB, но ничего конкретного. Любая помощь с благодарностью принята.