Написание 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, так как я хочу отказаться от него и попробовать что-то еще.
Кроме того, кто-нибудь знает, есть ли утилита командной строки, которая может быть использована для исправления нарушенного цвета фона?
Спасибо!