Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/60: Рейтинг темы: голосов - 60, средняя оценка - 4.62
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6

TPNGImage -> TBitmap(pf32bit)

31.01.2013, 12:03. Показов 12751. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.

Как корректно преобразовать любой png в bitmap 32?
bmp.Assign(png) не канает.
Если png имеет палитру то alphascanline = nil отсюда возникает проблема вытащить из png альфаканал. Как вообще обрабатывать png c палитрой?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2013, 12:03
Ответы с готовыми решениями:

Tbitmap.create и Tbitmap.scanline
Если после создания bitmap-а загрузить изображение (loadfromfile()) то изменение пикселей через scanline работает правильно, но если bitmap...

TPNGImage и прозрачность
Здравствуйте , Подскажите, загружаю png 24 бита изображение с прозрачным фоном Но прозрачность не воспринимается , как установить её...

Ошибка, когда рисую TPNGImage
Доброго времени суток. Собственно проблема в том, что когда я рисую на TPNGImage любым способом: uses PNGImage, ... ... procedure...

25
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.01.2013, 12:23
Цитата Сообщение от snake32 Посмотреть сообщение
проблема вытащить из png альфаканал
А что, метод TPNGObject.CreateAlpha разве не решает проблему ?
0
angstrom
31.01.2013, 12:46
Это нужно?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm4.FormCreate(Sender: TObject);
var
  png : TPNGImage;
  bmp : TBitmap;
begin
  png := TPNGImage.Create;
  png.LoadFromFile('my.png');
  png.CreateAlpha;
  png.TransparentColor := clWhite;
  Image1.Picture.Graphic := png;
 
  bmp := TBitmap.Create;
  bmp.Width  := png.Width;
  bmp.Height := png.Height;
  bmp.PixelFormat := pf32bit;
  bmp.Canvas.Draw(0, 0, png);
  bmp.SaveToFile('my.bmp');
  bmp.Free;
 
  png.Free;
end;
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6
31.01.2013, 14:54  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
TPNGObject.CreateAlpha разве не решает проблему ?
Нет не решает. К сожалению.
Цитата Сообщение от angstrom Посмотреть сообщение
Это нужно?
png.TransparentColor := clWhite; можно устанавливать только для некоторых форматов png иначе выскакивает эксепшн.

Добавлено через 35 минут
Delphi
1
2
3
4
5
6
7
8
  
      bmp := Graphics.TBitmap.Create;
      bmp.PixelFormat := pf32bit;
      bmp.SetSize( png.Width, png.Height );
 
      bmp.Canvas.Draw( 0, 0, png );
        
      bmp.SaveToFile( 'C:\Test.bmp' );
Этот код корректно сохраняет bmp32, однако, только для если png имеет режим RGB mode. Иначе,(если png имеет режим Indexed Color) alpha channel пустой(все байты = 0) и соответственно вся картинка полностью прозрачна. Смотрел режим через Photoshop CS5.
Как программно определить режим png?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.01.2013, 15:19
Цитата Сообщение от snake32 Посмотреть сообщение
Как программно определить режим png?
Судя по исходникам вот так: PNGObject.Header.ColorType
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6
31.01.2013, 17:40  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Судя по исходникам вот так: PNGObject.Header.ColorType
Опять не угадал. Режим в фотошопе не синхронизирован с этим полем
Вот пример картинки с Indexed Color

Попробуйте вынуть альфа канал отсюда
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
31.01.2013, 18:03
Цитата Сообщение от snake32 Посмотреть сообщение
Опять не угадал
Ты со мной в угадайку решил поиграться ?

Цитата Сообщение от snake32 Посмотреть сообщение
Режим в фотошопе
Какое мне дело до твоего фотошопа ?

Ты спросил "Как программно определить режим png", я тебе ответил - по значению упомянутого свойства.
В твой картинке оно равно COLOR_PALETTE, что соответствует ожидаемому режиму indexed color
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6
01.02.2013, 14:15  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Ты со мной в угадайку решил поиграться ?
Ладно, ладно... не кипятись. Я ж тебя не заставляю виртуальный метод заинлайнить.
Это я напутал. Целый день ковыряю этот сра... пнг. а результата НОЛЬ.

Ну дык получилось у кого-нить вынуть альфу с картинки из поста #6?

Добавлено через 1 час 23 минуты
Наконец-то получилось.

Добавлено через 18 часов 28 минут
https://www.cyberforum.ru/blog... g1131.html
0
Заблокирован
05.02.2013, 19:34
А причём тут палитровое изображение и альфа-канал? Альфа-канал соджержит только 32 битовая картинка.
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6
06.02.2013, 08:34  [ТС]
Lirrk повеселил. Скажите это картинке из 6 поста
0
Заблокирован
06.02.2013, 12:07
snake32,
Кто кого повеселил, так это вы меня.
Что касается картинки в посте 6. Никакого альфа-канала там нет. Индексное изображение его не имеет, но в нём есть прозрачность. и это только один цвет, которому эта прозрачность назначается. То есть это называется прозрачность по цветовому ключу. А альфа-канал, это градации полупрозрачности, которые могут включать полную прозрачность и полную непрозрачность. И это свойственно только изображениям содержащим 4 цветовых плоскости. А такая вот прозрачность по ключу, есть и в древнем GIF
А PNG это не картинка с альфа-каналом. Это формат картинок разных типов, сжатых оригинальным компрессором. И 32-битная картинка - рассматривается как картинка с альфа-каналом. Альфа-канал поддерживает не только PNG, Он есть и в TIFF и в TGA, а сейчас его официально собираются обьявить и для BMP, хотя место для него в нём было с самого начала.
Вы откройте свою картинку из поста 6 в фотошопе и посмотрите под увеличением. В ней нет плавных переходов. Там чётко очерченные рванные контуры. А альфа-канал обеспечивает сглаживание.


Да, и ещё код преобразователя глянте. В нём палировое изображение преобразуется в 24 битовый BMP а в 32 битовый с альфа-каналом преобразуются полноцветные 32-битные изображения и 16-битные чёрно-белые с алфа-каналом.
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6
06.02.2013, 12:56  [ТС]
Цитата Сообщение от Lirrk Посмотреть сообщение
Да, и ещё код преобразователя глянте. В нём палировое изображение преобразуется в 24 битовый BMP а в 32 битовый с альфа-каналом преобразуются полноцветные 32-битные изображения и 16-битные чёрно-белые с алфа-каналом.
Добило. Что мне в него смотреть? Это я его написал. Кстати, 16bit он не умеет обрабатывать.

Если вы мне не верите, то поясните, как мне удалось вытащить полноценный(глубина 8bit) альфа канал с индексного изображения? Сами проверьте в том же photoshop'e после преобразования в bmp. В альфа-канале увидите не только чисто белый и чёрный(что могло бы подойти для цветового ключа), но и градации серого! Как так!?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure Convert;
  var png:TPNGImage; bmp:TBitMap;
begin
  png := TPNGImage.Create;
  bmp := TBitMap.Create;
  png.LoadFromFile( '..\..\image.png' );
  bmp.SetSize( png.Width, png.Height );
 
  PngToBmp( png, bmp );
 
  bmp.SaveToFile( '..\..\image.bmp' );
  png.Free;
  bmp.Free;
end;
0
angstrom
06.02.2013, 13:10
Snake не спорь, GIF не имеет Alpha канала, чтобы ты не воображал. Есть только прозрачный цвет. Индексные файлы также не имеют его.
Заблокирован
06.02.2013, 13:34
snake32,
Врёте вы всё. Не вы этот модуль писали, если понятия не имеете что там внутри.
Как раз обработка бесцветных изображений с альфа-каналом там есть. А это 16-битовый формат пикселя. То есть пиксель хранится в слове (о котром вы написали - тупо байт в слово засунули). И никакого отношения этот формат к цветному 16-и битовому и тем более 8-битовому индексному не имеет. Что вы там во что преобразовывали пояния не имею. Но картинка в посте 6 это индексное изображение, в котором никакого альфа-канала нет.
1
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6
06.02.2013, 13:38  [ТС]
Цитата Сообщение от angstrom Посмотреть сообщение
не спорь, GIF не имеет Alpha канала, чтобы ты не воображал.
ну тогда ты поясни Как же мне удалось выудить полноценную альфу не имея её? Значит альфа всё-таки существует в Indexed Color? Не стыковочка.
0
Заблокирован
06.02.2013, 13:50
snake32,
Кроме трёпа я ничего не вижу. Где ваша полноценная картинка с альфа-каналом? и чем вы преобразовывали?
Давайте исходную картинку и то что получилось и программу котрой вы вытаскивали альфа-канал. Но только положите всё в архив а архив выкладываете.
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6
06.02.2013, 14:00  [ТС]
Цитата Сообщение от Lirrk Посмотреть сообщение
Давайте исходную картинку и то что получилось и программу котрой вы вытаскивали альфа-канал.
Ок, только пообещайте, что хоть раз как мужик выполните свои слова( мужик сказал -> мужик сделал )
А конкретно меня интересует следующее:
Цитата Сообщение от Lirrk Посмотреть сообщение
И потом посмотрим кому надо об стенку убиваться.
В архиве и прога и две картинки(исходная png и результат bmp)
Вложения
Тип файла: rar TestPNG.rar (1.68 Мб, 108 просмотров)
0
angstrom
06.02.2013, 14:51
Для того, чтобы понять суть Alpha-канала для индексированного PNG, можно прочитать это.
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,363
Записей в блоге: 6
06.02.2013, 15:07  [ТС]
Сразу читайте от сюда:http://www.w3.org/TR/PNG/#11transinfo
Там тоже всё врут
0
angstrom
06.02.2013, 15:25
Ну уж если официальная документация врёт, то комментарии излишни.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2013, 15:25
Помогаю со студенческими работами здесь

Изменить уровень прозрачности TPNGImage
Есть TPngImage с загруженным в него изображением. Необходимо в нем же нарисовать это изображение с заданным уровнем альфы...

Почему не работает TPNGimage в моем компоненте
Написал свой компонент для созданий кнопки из 2 картинок и плавного перехода между ними.... Когда я использовал Bitmap все...

Вывод 2х и более png в отдельный tpngimage c прозрачностью
Собственно вопрос. Как вывести 2 или более png картинки в отденльный TPngImage с сохранения прозрачности. Картинки примерно такого...

TpngImage
Друзья,никогда не добавлял новые компоненты.Видел ,что есть тема.Но не могу там разобраться как что.Объясните пожалуйста по шагам.

TPNGImage
Всем привет, у меня такая проблема когда запускаю программу то картинка отображается норм. А когда нажимаю кнопку проверки порта то он...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru