Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Bitmap и TFileStream, Как вытащить первое из второго? 
V
    Опции темы
Proxin
Дата 26.12.2009, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В общем, как? Известна высота изображения и ширина. Рылся в сети - ничего не нашёл.
PM MAIL   Вверх
artsb
Дата 26.12.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

bmp.LoadFromStream(stream);

?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Proxin
Дата 26.12.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Гениально, да. Но не то.
У меня есть файлстрим, в который напихана ещё куча информации. С определённой позиции начианается рисунок. Конец рисунка - не конец файла. Я знаю размеры рисунка (высота и ширина). Куда мне его можно считать и как вывести потом на bitmap?
PM MAIL   Вверх
artsb
Дата 26.12.2009, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Proxin @  26.12.2009,  20:44 Найти цитируемый пост)
Гениально, да. Но не то.

Как вы задали вопрос, так я и ответил smile

Цитата(Proxin @  26.12.2009,  20:44 Найти цитируемый пост)
С определённой позиции начианается рисунок.

Устанавливаете позицию курсора в потоке на нужную позицию и ...
Код

bmp.LoadFromStream(stream);

Всё будет ОК ;)

Добавлено @ 20:48
Цитата(Proxin @  26.12.2009,  20:44 Найти цитируемый пост)
Конец рисунка - не конец файла

Ну и что? LoadFromStream знает когда остановиться.

Это сообщение отредактировал(а) artsb - 26.12.2009, 20:48


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Alexeis
Дата 26.12.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Proxin @  26.12.2009,  19:44 Найти цитируемый пост)
Куда мне его можно считать и как вывести потом на bitmap? 

  Можно создать промежуточный TMemoryStream и в него сливать картинку.

Добавлено через 1 минуту и 51 секунду
Цитата(artsb @  26.12.2009,  19:47 Найти цитируемый пост)
Ну и что? LoadFromStream знает когда остановиться.

  К сожалению нет. TBitmap тупо читает до конца файла. В связи с этим иногда бывают проблемы, в частности с битмапами 64х64, 256х256 (текстуры)


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

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

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


Эксперт
****


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

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



Цитата(Alexeis @  26.12.2009,  20:56 Найти цитируемый пост)
К сожалению нет.

Странно. Я много раз так делал. До сих пор никаких проблем не было...

Добавлено через 2 минуты и 14 секунд
Тогда можно при сохранении, сначала сохранить изображение в промежуточный поток, потом в основной поток записать размер потока с картинкой и саму картинку. А при чтении читаем размер картинки, а потом во временный поток саму картинку и уже из него в битмап.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Proxin
Дата 26.12.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот так должно быть?

Код

filestr.read(memorystr,bytescount);
mybitmap:=tbitmap.create;
mybitmap.width:=mywidth;
mybitmap.height:=myheight;
mybitmap.loadfromstream(memorystr);

PM MAIL   Вверх
artsb
Дата 26.12.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Напишу на С++
Код

unsigned size;
filestr->Read(&size, sizeof(unsigned));
mybitmap = new Graphics::TBitmap();
// это не нужно
//mybitmap.width:=mywidth;
//mybitmap.height:=myheight;
TMemoryStream *str = new TMemoryStream();
str->CopyFrom(filestr, size);
str->Position = 0;
mybitmap->LoadFromStream(str);
delete str;


Добавлено @ 22:16
Цитата(Proxin @  26.12.2009,  22:01 Найти цитируемый пост)
Вот так должно быть?

А. Ну да. Только установка ширины и высоты излишни. И читайте кусок потока через метод CopyFrom. А перед этой строкой:
Код

mybitmap.loadfromstream(memorystr);

Обязательно позицию курсора в ноль нужно поставить. Иначе ничего не выйдет smile

Это сообщение отредактировал(а) artsb - 26.12.2009, 22:40


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Alexeis
Дата 26.12.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Вот это вызывает сомнение
filestr.read(memorystr,bytescount);

Думаю тут должен быть CopyFrom


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

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

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


Эксперт
****


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

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



Цитата(Alexeis @  26.12.2009,  22:29 Найти цитируемый пост)
Думаю тут должен быть CopyFrom 

Упс. Вы правы. А я почему-то везде написал просто Copy. smile

Добавлено через 2 минуты и 18 секунд
Цитата(Alexeis @  26.12.2009,  22:29 Найти цитируемый пост)
Вот это вызывает сомнение

мне кажется, что это вообще работать не должно.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Proxin
Дата 26.12.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



сделал с помощью copyfrom. появляется ошибка "bitmap image is not valid" - это значит, что я его не оттуда копирую?
PM MAIL   Вверх
artsb
Дата 26.12.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Proxin @  26.12.2009,  22:52 Найти цитируемый пост)
это значит, что я его не оттуда копирую? 

Возможно...
А в поток вы как сохраняли? SaveToStream?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Proxin
Дата 26.12.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это вообще не мой файл - пытаюсь делать парсилку по открытому формату.
Описание дано так: screenshotdata=3*width*height. Width и height я получаю правильно, смотрел с помощью другой парсилки. А вот сам битмап получить по этой технологии уже как-то не получается.
Ещё заметил, что начало файла как-то странно читается - если даже сиком позицию после открытия установить в ноль, то символы читаются начиная со второго только.
PM MAIL   Вверх
artsb
Дата 26.12.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ещё бы знать, как они сохраняют картинку... А вы уверены, что там битмап? Может там JPEG?

Цитата(Proxin @  26.12.2009,  23:12 Найти цитируемый пост)
если даже сиком позицию после открытия установить в ноль

Не понял. Где разворачиваются события?

Добавлено через 7 минут и 1 секунду
Побольше бы информации...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Proxin
Дата 26.12.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



rgb - три бита на пиксель без компрессии есть битмап самый натуральный. или я не прав?
ещё, если это поможет - вот описание структуры файла.

конкретно интересует поле screenshot. может,  я что-то неправильно понял (ширину и высоту получаю нормально) ?


Это сообщение отредактировал(а) Proxin - 22.3.2010, 15:47
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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