HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 05.11.2023, 18:58
Digger Man52
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами: 3596877

Репутация: 183


По умолчанию

Была надобность написать такой класс, для того, что бы можно было сразу все файлы в директории конвертировать в ICO, BMP.

C++:





[CODE]
#pragma pack(push, 2)
struct
BitmapFileHeader
{
uint16_t
type
;
uint32_t
size
;
uint16_t
reserved1
;
uint16_t
reserved2
;
uint32_t
offset
;
}
;
struct
BitmapInfoHeader
{
uint32_t
size
;
int32_t
width
;
int32_t
height
;
uint16_t
planes
;
uint16_t
bitCount
;
uint32_t
compression
;
uint32_t
sizeImage
;
int32_t
xPelsPerMeter
;
int32_t
yPelsPerMeter
;
uint32_t
clrUsed
;
uint32_t
clrImportant
;
}
;
struct
IconHeader
{
uint16_t
reserved
;
uint16_t
type
;
uint16_t
count
;
}
;
struct
IconDirectoryEntry
{
uint8_t
width
;
uint8_t
height
;
uint8_t
colorCount
;
uint8_t
reserved
;
uint16_t
planes
;
uint16_t
bitCount
;
uint32_t
sizeInBytes
;
uint32_t
offset
;
}
;
static
const
char
ppm_header
[
]
=
"P6\n32 32\n255\n"
;
// P6 - формаит PPM, 32 32 - размер, 255 цветовой компонент от 0 до 255
#pragma pack(pop)
class
ImageConverter
{
public
:
void
ConvertPNGtoBMP
(
const
std
::
string
&
inputFileName
,
const
std
::
string
&
outputFileName
)
{
std
::
ifstream
inputFile
(
inputFileName
,
std
::
ios
::
binary
)
;
if
(
!
inputFile
)
{
std
::
cerr

(
&
fileHeader
)
,
sizeof
(
fileHeader
)
)
;
outputFile
.
write
(
reinterpret_cast

(
&
infoHeader
)
,
sizeof
(
infoHeader
)
)
;
std
::
vector

imageData
(
32
*
32
*
3
,
0
)
;
outputFile
.
write
(
reinterpret_cast

(
imageData
.
data
(
)
)
,
imageData
.
size
(
)
)
;
}
void
ConvertPNGtoPPM
(
const
std
::
string
&
inputFileName
,
const
std
::
string
&
outputFileName
)
{
std
::
ifstream
inputFile
(
inputFileName
,
std
::
ios
::
binary
)
;
if
(
!
inputFile
)
{
std
::
cerr

imageData
(
(
std
::
istreambuf_iterator

(
inputFile
)
)
,
std
::
istreambuf_iterator

(
)
)
;
std
::
ofstream
outputFile
(
outputFileName
,
std
::
ios
::
binary
)
;
if
(
!
outputFile
)
{
std
::
cerr

(
imageData
.
data
(
)
)
,
imageData
.
size
(
)
)
;
if
(
!
outputFile
)
{
std
::
cerr

imageData
(
(
std
::
istreambuf_iterator

(
inputFile
)
)
,
std
::
istreambuf_iterator

(
)
)
;
IconHeader iconHeader
=
{
0
,
1
,
1
}
;
IconDirectoryEntry directoryEntry
=
{
32
,
32
,
0
,
0
,
1
,
32
,
static_cast

(
imageData
.
size
(
)
)
,
22
}
;
std
::
ofstream
outputFile
(
outputFileName
,
std
::
ios
::
binary
)
;
if
(
!
outputFile
)
{
std
::
cerr

(
&
iconHeader
)
,
sizeof
(
iconHeader
)
)
;
outputFile
.
write
(
reinterpret_cast

(
&
directoryEntry
)
,
sizeof
(
directoryEntry
)
)
;
outputFile
.
write
(
reinterpret_cast

(
imageData
.
data
(
)
)
,
imageData
.
size
(
)
)
;
if
(
!
outputFile
)
{
std
::
cerr



Структуры спизжены с Polychaos если что

пример использования
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.