Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMemoryStream to BYTE, не могу перегнать одно в другое 
:(
    Опции темы
lamber
Дата 22.8.2010, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



Суть в следующем у меня есть изображение в TMemoryStream нужно его перегнать в BYTE как я уже только не извращался вообщем вот код

Код

BYTE *image= new BYTE[data->Size];
image=(BYTE*)data->Memory;

data->SaveToFile("image.png");
FILE* f;
f=fopen("test.png","wb");
fwrite(image,data->Size,sizeof(image),f);


data тут соответственно TMemoryStream при сохранении в файл все окей но как только сохраняю BYTE хрень одна какая-то.

Это сообщение отредактировал(а) lamber - 22.8.2010, 12:33
PM MAIL   Вверх
lamber
Дата 22.8.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



Ответ получен благодаря Zor'у
Код

BYTE *image = new BYTE[data->Size];
memmove(image, data->Memory, data->Size);

data->SaveToFile("image.png");

FILE* f;
f = fopen("test.png", "wb");
fwrite(image, data->Size, 1, f);

// delete [] image;

PM MAIL   Вверх
mrbrooks
Дата 23.8.2010, 07:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



ага. отличное корявое решение.
не стоит забывать, что у TMemoryStream есть методы чтения. К примеру ReadBuffer
PM MAIL   Вверх
lamber
Дата 25.8.2010, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



2mrbrooks
Хорошо подскажите код с более правильным решением, будем только рады.
PM MAIL   Вверх
Alexeis
Дата 25.8.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Код

data->Position = 0;
data->Read(image, data->Size);



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
SVN74
Дата 25.8.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 11
Всего: 18



Вот краткий пример, - как поместить картинку в TMemoryStream, а потом считать в массив...
Код

TJPEGImage *jpg;
TMemoryStream* pms;
jpg = new TJPEGImage;
pms = new TMemoryStream();

pms->Position=0; 
jpg->SaveToStream(pms);
pms->Position=0;

int VSize = pms->Size;
char *VSource=new char[N];
pms->ReadBuffer(&VSource[0],VSize);

PM MAIL WWW   Вверх
mrbrooks
Дата 25.8.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(lamber @  25.8.2010,  16:11 Найти цитируемый пост)
Хорошо подскажите код с более правильным решением, будем только рады. 

да здесь вариантов воз и маленькая тележка:
Код

    #include <memory>
    //вариант 1
    String path = ExtractFilePath(Application->ExeName) + "\\test.jpg";
    if(FileExists(path))
    {
         std::auto_ptr<TMemoryStream>ms(new TMemoryStream());
         ms->LoadFromFile(path);
         byte *buffer = new byte[ms->Size];
         ms->ReadBuffer(buffer, ms->Size);
         delete [] buffer;
    }

    //вариант 2
    String path = ExtractFilePath(Application->ExeName) + "\\test.jpg";
    if(FileExists(path))
    {
         TBytes bytes;
         std::auto_ptr<TBytesStream>bs(new TBytesStream(bytes));
         bs->LoadFromFile(path);
         bs->Bytes; // - массив байт
    }    


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.