Visual Studio 2010 — написание 8-битного png с прозрачным цветом из C ++ в Windows

У меня есть некоторый код для генерации искусственных изображений ложных цветов из данных сонара бокового сканирования, которые я хочу загрузить в Google Earth в качестве наложений. Я должен быть экономным, так что 8-битные файлы PNG, похоже, были подходящим вариантом. Я могу использовать 1 запись таблицы цветов для фона и 255 для моей таблицы ложных цветов.

Я видел предыдущие ответы, которые рекомендовали класс CImage в библиотеке ATL. Поэтому я смотрю документацию MSDN здесь (http://msdn.microsoft.com/en-us/library/5eb252d0(v=vs.100).aspx)

Это выглядит достаточно просто, поэтому я написал что-то вроде этого:

CImage Cimg;
Cimg.Create(width,height,8,0);

RGBQUAD ColorTable[256];
for(i=0;i<256;i++)
// Fill table.
Cimg.SetTransparentColor(long(255));
Cimg.SetColorTable(0,256,Ctable);

// fill the pixel values.

Cimg.Save("TestFile.png",Gdiplus::ImageFormatPNG);

Все работает более или менее, как и ожидалось, но цвет 255 — это просто другой цвет. Это совсем не прозрачно.

Я знаю, что это не проблема с GoogleEarth, потому что я могу загрузить файл в Paint Shop Pro и вручную установить чистый фон, и тогда все отлично работает.

Я попытался установить байт .rgbReserved в таблице RGBQUAD для всех нулей, 255 и линейного изменения, думая, что это может быть интерпретировано как альфа-значение, но это не имело никакого эффекта.

Я также попытался пошагово реализовать CImage :: Save (), где я определил, что он использует Gdiplus :: Bitmap :: Save () для записи с помощью «Встроенного PNG-кодера». Я подумал, что, возможно, были некоторые параметры кодера, которые не были установлены правильно, но эта страница MSDN предполагает, что для кодера PNG есть нулевые параметры.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms533846(v=vs.85).aspx

Итак, я думаю, мой вопрос «ПОМОГИТЕ!» 🙂

В частности, кто-нибудь знает, позволит ли какая-либо из собственных функций MSDN генерировать 8-битные PNG с выбором, который я могу определить, и хотя бы одним прозрачным цветом? Простое исправление было бы замечательно, но я достаточно раздражен CImage теперь, когда я готов отказаться от него и попробовать что-то еще.

Кроме того, кто-нибудь знает, есть ли утилита командной строки, которую можно использовать для исправления нарушенного цвета фона?

Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]