Как получить «реальные» цвета при экспорте рисунка GDI в BMP

StackOverflow https://stackoverflow.com/questions/2759568

Вопрос

Я разрабатываю веб-обработчик ASP.NET, который возвращает изображения, делая в памяти в памяти System.Windows.Forms.Control и затем экспортирует отображаемый контроль как растровый карт, сжатый в PNG, используя метод DrawToBitmap(). Анкет Классы уже полностью работают, за исключением проблемы с заданием цвета. Например, это датчик, генерируемый веб -обработчиком.

The gauge

Цвета, назначенные внутренним частям датчика, красные (#FF0000), желтый (#FFFF00) и зеленый (#00FF00) но я получаю только тупивую версию каждого цвета (#CB100F для красного, #CCB70D для желтого и #04D50D для зеленого).

Фон представляет собой файл BMP, содержащий цветовой градиент. Потеря цвета происходит, является ли фон градиентом в качестве образца, черный холст, белый холст, прозрачный холст, даже если нет фонового набора.

  • С черным фоном

With black background

  • С прозрачным фоном

With a transparent background

  • С белым фоном

With a white background

  • Без фонового набора

Without a background set

  • С пиксельным форматом в Format32bppargb

With pixelformat 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 и) посмотреть, какие цифры перед написанием растрового изображения. (Использовать Замок; Есть учебные пособия по коду по получению байтов в растровых изображениях).

Я только что понял, что у вас действительно ярко -желтые части на этом указателе треугольника, поэтому проблема, вероятно, связана с фоновым изображением. Вы рисуете эти дуги примитивами или загружаете растровый карту? У вас могут быть проблемы с гамма, проблемы с цветным пространством и т. Д. В зависимости от входного формата, предполагая, что вы используете изображение для части красного/желтого/зеленого измерителя. Попробуйте рисовать эти формы в коде, если вы используете изображение. Какой бы код заставляет желтый треугольник получает яркие цвета, поэтому используйте один и тот же формат изображения, кисть или что -то в этом роде заставляет работать желтый треугольник.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top