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