Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Форматы графических файлов

12K
10 ноября 2005 года
Lilo
8 / / 03.11.2005
Необходимо описание и по возможности программная реализация открытие-сохранение графических файлов, причём не самых известных (НЕ .gif, .jpg, .tiff, .bmp). Если кто-нибудь с таким сталкивался - HELP!!!!!!!! (: заранее благодарю
279
10 ноября 2005 года
bave
456 / / 07.03.2004
да легко:
Очень хороший формат TGA ? (хороший для RGBA -
в нём ничего лишнего)

структура:

typedef struct {
unsigned int width, height, bpp;
unsigned char *pData;
} DATA_TGA;


DATA_TGA dtga;

bool LoadTGA(char *path)
{

unsigned char *pBuffer;
char szStr[1024];
memset(dtga, 0, sizeof(DATA_TGA));
unsigned char TGAHeader[12] = {0,0,2,0,0,0,0,0,0,0,0,0};
unsigned char TGAHead[6];
unsigned char *pPtr;
unsigned int bytesPerPixel;

ifstream ifs;
ifs.open(path, ios::in|ios::binary|ios::beg|ios::nocreate);
if(ifs.fail())
{
memset(szStr, 0, sizeof(char)*1024);
strcpy(szStr, "Can Not Load File: ");
strcat(szStr, path);
MessageBox(0, szStr, "Load Error",MB_OK|MB_ICONEXCLAMATION);
return false;
}
ifs.seekg(0, ios::end);
unsigned long fileSize = ifs.tellg();
ifs.seekg(0, ios::beg);

pBuffer = new unsigned char[fileSize];
ifs.read(pBuffer, fileSize);
ifs.close();

pPtr = pBuffer;
if(memcmp(pPtr, TGAHeader, sizeof(TGAHeader))!=0)
{
MessageBox(0, "Bitmap Loading Failed","LOAD ERROR",MB_OK|MB_ICONEXCLAMATION);
return false;
}
else
{
pPtr+=sizeof(TGAHeader);
memcpy(TGAHead, pPtr, sizeof(TGAHead));
dtga.width = TGAHead[1] * 256 + TGAHead[0];
dtga.height = TGAHead[3] * 256 + TGAHead[2];
if((dtga.width <= 0) || (dtga.height <= 0))
{
MessageBox(0, "Bitmap Loading Failed","LOAD ERROR", MB_OK|MB_ICONEXCLAMATION);
return false;
}
dtga.bpp = TGAHead[4];
if((dtga.bpp != 24) && (dtga.bpp != 32))
{
MessageBox(0, "Bitmap Loading Failed","LOAD ERROR", MB_OK|MB_ICONEXCLAMATION);
return false;
}
bytesPerPixel = (dtga.bpp)/8;
//BitmapSize - размер растра
unsigned long BitmapSize = (dtga.height)*(dtga.width)*bytesPerPixels;
dtga.pData = (unsigned char *)malloc(BitmapSize);
pPtr+=sizeof(TGAHead);
memcpy(dtga.pData, pPtr, BitmapSize);
}
delete [] pBuffer;
return true;
}

Вроде так... - это загрузка,
думаю с сохранением проблем не будет...- но если надо и его написать могу.
292
11 ноября 2005 года
Matush
726 / / 14.01.2004
Цитата:
Originally posted by Lilo
Необходимо описание и по возможности программная реализация открытие-сохранение графических файлов, причём не самых известных (НЕ .gif, .jpg, .tiff, .bmp). Если кто-нибудь с таким сталкивался - HELP!!!!!!!! (: заранее благодарю



На любой вкус и цвет:
http://www.wotsit.org , в разделе графические файлы

12K
11 ноября 2005 года
Lilo
8 / / 03.11.2005
Цитата:
Originally posted by bave

думаю с сохранением проблем не будет...- но если надо и его написать могу.


если не сложно то - нада) огромное спасибо за помощь (:

279
11 ноября 2005 года
bave
456 / / 07.03.2004
ну вот так:

#include <fstream.h> //Это надо не забыть подключить

//В функцию передаём указатель на объект структуры

//в которою загрузили картинку

bool SaveTGA(
char *path, //Путь - куда сохранять
DATA_TGA *ptga //Указатель на картинку
)
{
unsigned char TGAHeader[12] = {0,0,2,0,0,0,0,0,0,0,0,0};
unsigned char TGAHead[6];
unsigned char *pBuff;
unsigned char *pPtr;
unsigned int bytesPerPixel = (ptga->bpp)/8;
unsigned long fSize = (ptga->width)*(ptga->height)*bytesPerPixel;
pBuff = (unsigned char *)malloc(fSize+18 );
pPtr = pBuff;
memset(pPtr, 0, (fSize+18 ));
//Обратно формируем заголовок
//Хотя лучше было сохранить, его при загрузке
//(чё то я про это не подумал :) )
memcpy(pPtr, TGAHeader, sizeof(TGAHeader));
pPtr+=sizeof(TGAHeader);
memset(TGAHead, 0, sizeof(TGAHead));
TGAHead[0] = ((ptga->width) - (ptga->width)%256);
TGAHead[1] = (ptga->width)%256;
TGAHead[2] = (ptga->height) - (ptga->height)%256;
TGAHead[3] = (ptga->height)%256;
TGAHead[4] = ptga->bpp;
memcpy(pPtr, TGAHead, sizeof(TGAHead));
pPtr+=sizeof(TGAHead);
memcpy(pPtr, ptga->pData, fSize);
ofstream outFile(path, ios::trunc|ios::binary);
if(!outFile)
{
MessageBox(NULL, "Can Not Write File","Error", MB_OK|MB_ICONERROR);
return false;
}
outFile.write(pBuff, (fSize+18 ));
outFile.close();
delete [] pBuff;
return true;
}

Ну вот вроде так, если нигде не накосячил...
12K
11 ноября 2005 года
Lilo
8 / / 03.11.2005
Цитата:
Originally posted by bave
ну вот так:
...........
Ну вот вроде так, если нигде не накосячил...


вай) пойду дальше изучать)) благобдарю (: хотела сказать, что если что помогу, но понимаю на сколько глупо енто звучит. так что просто спасибо (:

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог