Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > BlitzMax > FAQ и уроки

Ответ
 
Опции темы
Старый 31.01.2014, 08:16   #1
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,369
Написано 487 полезных сообщений
(для 880 пользователей)
Заголовок PNG

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

Код:
Type TPngIHDR
	Global w:Int, h:Int
	Global depth:Byte, colorType:Byte, compression:Byte, filter:Byte, interlace:Byte
		
	Function readInfo(filename:String)
		Local f:TStream = OpenStream(filename)
		f.SkipBytes(8) 'признак пнг-файла
		Local buf:Byte[4]
		f.ReadBytes(buf, 4) 'length
		f.ReadBytes(buf, 4) 'ihdr
		f.ReadBytes(buf, 4)
		w = bytes2int(buf) 'w
		f.ReadBytes(buf, 4)
		h = bytes2int(buf) 'h
		depth = f.ReadByte() 'bit depth
		colorType = f.ReadByte() 'color type
		compression = f.ReadByte() 'compression method
		filter = f.ReadByte() 'filter method
		interlace = f.ReadByte() 'interlace method
		CloseStream(f)
	End Function
	
	Function hasPlte:Int()
		Return (colorType = 3)
	End Function
	
	Function hasAlpha:Int()
		Return (colorType = 4 Or colorType = 6)
	End Function

	Function bytes2int:Int(buf:Byte[])
		Return (((buf[0] Shr 24) & $ff000000) | ((buf[1] Shr 16) & $00ff0000) | ((buf[2] Shr 8) & $0000ff00) Or buf[3])
	End Function
	
End Type
Пример использования:
Local path:String = "gfx/bullet.png"
TPngIHDR.readInfo(file)
Local plte:Int = TPngIHDR.hasPlte()
Local alpha:Int = TPngIHDR.hasAlpha()
if (plte)
    'что-то делаем так
else
    'что-то делаем эдак
    if (alpha)
        '
    endif
endif
Ссылки по теме:
Стандарт PNG (eng.)
Статья на хабре (рус.)
(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
Andvrok (31.01.2014), Кирпи4 (31.01.2014), L-ee-X (03.02.2014), mr.DIMAS (01.02.2014), Nex (31.01.2014), Черный крыс (11.02.2014)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 22:32.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com