Как получить «реальные» цвета при экспорте рисунка GDI в BMP
-
02-10-2019 - |
Вопрос
Я разрабатываю веб-обработчик ASP.NET, который возвращает изображения, делая в памяти в памяти System.Windows.Forms.Control
и затем экспортирует отображаемый контроль как растровый карт, сжатый в PNG, используя метод DrawToBitmap()
. Анкет Классы уже полностью работают, за исключением проблемы с заданием цвета. Например, это датчик, генерируемый веб -обработчиком.
Цвета, назначенные внутренним частям датчика, красные (#FF0000
), желтый (#FFFF00
) и зеленый (#00FF00
) но я получаю только тупивую версию каждого цвета (#CB100F
для красного, #CCB70D
для желтого и #04D50D
для зеленого).
Фон представляет собой файл BMP, содержащий цветовой градиент. Потеря цвета происходит, является ли фон градиентом в качестве образца, черный холст, белый холст, прозрачный холст, даже если нет фонового набора.
- С черным фоном
- С прозрачным фоном
- С белым фоном
- Без фонового набора
- С пиксельным форматом в Format32bppargb
Я попробовал несколько глубоких цветов растрового цвета, выходных форматов, уровня сжатия и т. Д., Но ни один из них, кажется, не работает. Любые идеи?
Это выдержка исходного кода:
Bitmap bmp = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Image bgimage = (Image) HttpContext.GetGlobalResourceObject("GraphicResources", "GaugeBackgroundImage");
Canvas control_canvas = new Canvas(); //inherits from Control
....
//the routine that makes the gauge
....
control_canvas.DrawToBitmap(bmp, new Rectangle(0, 0, w, h));
Решение 4
Canvas был классом, предоставленным третьей стороной. Мы нашли ошибку в их пакете, они выпустили новую версию, и проблема была окончательно решена. В любом случае спасибо за ваше время!
Другие советы
Когда вы рисуете цвета, проверьте, чтобы убедиться, что альфа -канал также устанавливается правильно. Если у вас есть альфа, это будет смешиваться с этим темным фоном и даст вам более темный цвет.
Вы пробовали это только с PNG? Я столкнулся с этой проблемой с PNG (или JPEGS?)
Обратите внимание, что я не говорю, что GIFS решит вашу проблему в долгосрочной неправде, но это может сказать вам, является ли PNG написать/чтение является проблемой. Попробуйте, попробуйте BMP, попробуйте что -нибудь. Не верьте PNG. Вы можете попробовать сбросить значения RGB в файл журнала (или на диск как сырой и импортируя в Photoshop и) посмотреть, какие цифры перед написанием растрового изображения. (Использовать Замок; Есть учебные пособия по коду по получению байтов в растровых изображениях).
Я только что понял, что у вас действительно ярко -желтые части на этом указателе треугольника, поэтому проблема, вероятно, связана с фоновым изображением. Вы рисуете эти дуги примитивами или загружаете растровый карту? У вас могут быть проблемы с гамма, проблемы с цветным пространством и т. Д. В зависимости от входного формата, предполагая, что вы используете изображение для части красного/желтого/зеленого измерителя. Попробуйте рисовать эти формы в коде, если вы используете изображение. Какой бы код заставляет желтый треугольник получает яркие цвета, поэтому используйте один и тот же формат изображения, кисть или что -то в этом роде заставляет работать желтый треугольник.