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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузить двоичные данные в Image 
:(
    Опции темы
serezhka1986
Дата 16.1.2013, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый день!
Есть картинка в виде двоичных данных. Подскажите, пожалуйста, можно ли ее загрузить в TImage без сохранения на диск? Если можно, то поделитесь примером, буду благодарен.
Спасибо!
--------------------
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть жопой на клавиатуру... 
PM   Вверх
kami
Дата 16.1.2013, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



В каком контейнере лежат данные и какого они формата (bmp, jpg, png...) ?
PM MAIL WWW   Вверх
serezhka1986
Дата 16.1.2013, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(kami @  16.1.2013,  13:41 Найти цитируемый пост)
В каком контейнере лежат данные и какого они формата (bmp, jpg, png...) ? 

Данные я думаю как-то (пока ищу как) передавать из 1С в Delphi, любого формата (bmp, jpg, png...). 
--------------------
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть жопой на клавиатуру... 
PM   Вверх
kami
Дата 16.1.2013, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Цитата(serezhka1986 @  16.1.2013,  15:20 Найти цитируемый пост)
любого формата (bmp, jpg, png...). 

Тогда или храни расширение файла вместе с данными, или ищи, как их можно распознать по содержимому.
У меня (рекомендую рассматривать код исключительно как концепцию) сделано так:
Код

function GetGraphicClassByFileExt(FileExt: string): TGraphicClass;
begin
  FileExt := AnsiLowerCase(FileExt);
  Result := nil;
  if FileExt = 'png' then
    Result := TPngImage;
  if (FileExt = 'jpg') or (FileExt = 'jpeg') then
    Result := TJPEGImage;
  if (FileExt = 'wmf') or (FileExt = 'emf') then
    Result := TMetafile;
  if FileExt = 'ico' then
    Result := TIcon;

  if (FileExt = 'tiff') or (FileExt = 'tif') then
    Result := TWICImage;
  if FileExt = 'bmp' then
    Result := TBitmap;
end;

function ReloadGraphic(GraphicExt: string; GraphicStream: TStream): TGraphic;
var
  GraphicClass: TGraphicClass;
begin
  
  GraphicClass := GetGraphicClassByFileExt(GraphicExt);
  if (GraphicClass = nil) or (GraphicStream.Size = 0) then
    begin
       Result := nil;
    end
  else
    begin
      Result := GraphicClass.Create;
      try
        Result.LoadFromStream(GraphicStream);
      except
        on e: Exception do
          begin
            // LogFileX.Log('Ошибка при загрузке Graphic из потока в ReloadGraphic '#13#10 + e.Message +
            //     #13#10'CallStack:'#13#10 + e.StackTrace);
            FreeAndNil(Result);
          end;
      end;
      //FPhotoExt := GraphicExt;
    end;
end;

// использовать, например, так:
Image1.Picture.Graphic:=ReloadGraphic('jpg', myStreamWithBinaryData);


Добавлено через 4 минуты и 19 секунд
Хотелось бы, конечно, задействовать функционал FileFormats из модуля Graphics, но увы - он объявлен в implementation, так что приходится извращаться через такие функции, как GetGraphicClassByFileExt

Добавлено через 5 минут и 54 секунды
Само собой - в модуле, где это будет использоваться, должен быть подключен модуль Graphics и все модули, отвечающие за работу с "нестандартными" расширениями, т.е. (например) jpeg, pngimage,...
PM MAIL WWW   Вверх
serezhka1986
Дата 16.1.2013, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я в принципе могу на стороне 1С конвертировать картинку в любой нужный мне формат, а потом передавать
--------------------
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть жопой на клавиатуру... 
PM   Вверх
kami
Дата 16.1.2013, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Цитата(serezhka1986 @  16.1.2013,  15:45 Найти цитируемый пост)
могу на стороне 1С конвертировать картинку в любой нужный мне формат, а потом передавать

Так определись, в каком виде ты будешь получать картинку в программе на Delphi.
PM MAIL WWW   Вверх
serezhka1986
Дата 16.1.2013, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(kami @  16.1.2013,  15:47 Найти цитируемый пост)
Так определись, в каком виде ты будешь получать картинку в программе на Delphi. 

Скорее всего это будет bmp.
--------------------
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть жопой на клавиатуру... 
PM   Вверх
kami
Дата 16.1.2013, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Цитата(serezhka1986 @  16.1.2013,  15:50 Найти цитируемый пост)
Скорее всего это будет bmp.

Интересно было бы посмотреть на передачу между двумя программами bmp. Не hbitmap же передавать smile
PM MAIL WWW   Вверх
Чучмек
Дата 16.1.2013, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



kami уже ответил.  - LoadFromStream
Код

var
 ms:TMemoryStream;
 memlength:integer;
begin
ms:=TMemoryStream.Create;//создаем поток
ms.Size:=memlength;//указываем размер
...//копируем в поток данные move(mem^,ms.Memory^,memlength) или FileRead(h,ms.Memory^,memlength) или еще как нибудь.
//ms.Position:=0; на всякий случай позицию в ноль.
Image1.Picture.Bitmap.LoadFromStream(ms); //загружаем битмап из потока
ms.Free;//поток больше не нужен 
end;



Это сообщение отредактировал(а) Чучмек - 16.1.2013, 21:00


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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