5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
1

При конвертации из png в bmp теряется прозрачность

18.07.2012, 19:16. Показов 4574. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
мне нужно во время работы программы загрузить png изображения в ImageList, но в ImageList картинки появляются с каким то серым фоном. Глюк проявляется даже если загружать не в ImageList, а в Timage, типа вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
    Graphics::TBitmap *bmp=new Graphics::TBitmap;
    TPngImage *png = new TPngImage();
    png->Transparent = true;
    bmp->Transparent = true;
    bmp->Width = 100;
    bmp->Height = 100;
 
    png->LoadFromFile("setup.png");
    bmp->Assign(png) ;
 
    Image1->Picture->Assign(bmp);
в результате появляется картинка с серым фоном, если сделать так Image1->Picture->Assign(png), то фона нет. Получается, что фот появляется при bmp->Assign(png), тоесть, при конвертации png в bmp. В инете читал, что у png и bmp разные форматы прозрачности. Но может, всетаки, можно как то сделать конвертацию без потери прозрачности?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2012, 19:16
Ответы с готовыми решениями:

Вращение TImage c PNG. Нужна переделка решения для BMP под PNG
Здравствуйте. Очень нужна помощь с вращением. Есть решение данной проблемы для формата bmp :...

PNG прозрачность
У меня BCB 2010 там есть TPNGImage.hpp есть возможность создавать png холсты))) так вот мне нужно...

Изменить прозрачность PNG
В у дива id = "#Obloge2". Его описание в css: #Obloge2 { background: url(Staty.png) no-repeat...

IE6 и прозрачность png
У кого-нибудь есть наиболее лучшее решение. В интернете много всего но пока не подходит ничего.

10
LK
Заблокирован
18.07.2012, 19:34 2
1.
C++
1
2
3
4
5
6
7
8
9
10
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->LoadFromFile("test.bmp");
bmp->Transparent = true;  // разрешаем прозрачность
bmp->TransparentMode = tmFixed; // для прозрачности будем использовать фиксированное значение цвета
bmp->TransparentColor = clWhite; // превратим белый цвет в прозрачный
delete bmp;
bmp = NULL;
 
// Если в третьей строчке вместо tmFixed указать tmAuto,
// то прозрачным будет сделан нижний левый пиксель.
2. Настоящая прозрачность с TBitmap
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
18.07.2012, 20:18  [ТС] 3
попробовал, но не работает.
Сначала думал, что это потому, что у меня тот фон, что должен быть прозрачным, не мелого а другого цвета, я его определил с помощью ColorPic_v41, подставил, но всеравно не работает.
C++
1
2
3
4
5
6
7
8
9
10
        Graphics::TBitmap *bmp=new Graphics::TBitmap;
    TPngImage *png = new TPngImage();
    png->Transparent = true;
    bmp->Transparent = true;
    bmp->Width = 100;
    bmp->Height = 100;
    bmp->TransparentMode = tmFixed; // для прозрачности будем использовать фиксированное значение цвета
    bmp->TransparentColor = 0x3B4751; // превратим белый цвет в прозрачный
    png->LoadFromFile("setup.png");
    bmp->Assign(png) ;
И даже если ставлю tmAuto вместо tmFixed, то всеравно фон не прозрачный, хотя нижний левый пиксель как раз того цвета, который должен быть прозрачным
0
LK
Заблокирован
18.07.2012, 20:36 4
C++
1
2
bmp->TransparentMode = tmFixed; // для прозрачности будем использовать фиксированное значение цвета
// bmp->TransparentColor = 0x3B4751
не пробовал?

Добавлено через 1 минуту
а вам не кажется. что, пока вы делаете картинку прозрачной, ее еще в битмапе нет:
C++
1
2
3
4
bmp->TransparentMode = tmFixed; // для прозрачности будем использовать фиксированное значение цвета
    bmp->TransparentColor = 0x3B4751; // превратим белый цвет в прозрачный
    png->LoadFromFile("setup.png");
    bmp->Assign(png) ;
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
18.07.2012, 21:08  [ТС] 5
эм, тут я случайно забыл у сомого Timage установить прозрачность, теперь на нем фон прозрачный даже когда не указываю TransparentMode у bmp (там помойму по умолчанию и так авто). А вот с ImageList(sImageList) этот прикол не проходит, если загружать png просто кликнув по компоненту, то загружается сразу нормально без фона, а вот когда запускаю прогу и загружаю еще картинку (в RunTime), то вот эта загруженая остается в фоном.
TransparentMode пробовал указывтаь и до загрузки bmp, и после, результат одинаков

Добавлено через 19 минут
а мож я не правильно в imagelist добавляю?
я делаю так imlist->Add(bmp, bmp);
0
LK
Заблокирован
18.07.2012, 21:23 6
add a png image to a imagelist in runtime using Delphi XE
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
18.07.2012, 21:38  [ТС] 7
LK, попробовал, но не работает. Там правда под XE, а у меня 2010, мож из-за этого
0
LK
Заблокирован
18.07.2012, 22:06 8
та не, вашего
C++
1
imlist->Add(bmp, bmp);
достаточно
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
18.07.2012, 22:14  [ТС] 9
эм, что то я не доганяю...
0
1122 / 793 / 101
Регистрация: 01.02.2011
Сообщений: 1,874
Записей в блоге: 1
19.07.2012, 08:25 10
может проще в vector запихнуть?
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
19.07.2012, 17:23  [ТС] 11
разобрался.
Проблема была в цветовом режиме исходных изображений. Поставил через фотошоп RGB и прозрачность осталась)))))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2012, 17:23
Помогаю со студенческими работами здесь

GDI+ и прозрачность PNG
Редко программирую что-либо, но бывает. Помогите советом или примером в решении, как мне казалось,...

bmp прозрачность
итак, учусь работать с графикой. нужно сделать прозрачный bmp, пытался делать 16 или 8 бит...

Подскажите программу пакетной конвертации в BMP 565.
Весь Гугл перерыл - не нашел простого пакетного конвертера в формат BMP - RGB 16 bit (R5,G6,B5)....

Загрузка png из dll + прозрачность
Всем привет! В кое-то веке пришлось загрузить png изображение из dll. Поскольку ни раз читал про...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru