Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2013, 22:15   #1
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
Восклицание Загрузка изображения

Здравствуйте! В DFM файле формы изображения, иконки, сохраняются в таком виде:
Код:
Icon.Data = {
    0000010001002020000001002000A81000001600000028000000200000004000
    0000010020000000000000100000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000009ECD010098CC03009A
    CC060097CB090074C625016FD06E1381DFAA2A97E6D636A2EAF03DA8EBFD3EA9
    EBFB3AA5E9EC2B98E5CE107EDC9F006ECD5E007DC61A0097CA09009ACC060099
    CB03009AD7010000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000062
    C62F0776DFA72797F0F562C0FCFF87CDF1FF8EBACAFF90AAACFF9CAAA5FF9CAB
    A5FF95B0B1FF99C7D1FF9ADFF6FF6FCAFAFF2A96ECEA026EDA8D0061C31A0000
    ...}
Возможно ли в таком же виде загружать картинку не из DFM файла, а в самом коде программы?
LomoCoder вне форума Ответить с цитированием
Старый 13.08.2013, 22:18   #2
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

В ресурсы запихай.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 13.08.2013, 22:22   #3
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию

А без ресурсов никак не обойтись?
LomoCoder вне форума Ответить с цитированием
Старый 13.08.2013, 22:28   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

LomoCoder, можно и без них.
Преобразуешь картинку в массив байт и записываешь как константу.

Я так целые DLL храню
Человек_Борща вне форума Ответить с цитированием
Старый 13.08.2013, 22:33   #5
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию

Ага так, записать то я запишу, а обратно как в картинку?
LomoCoder вне форума Ответить с цитированием
Старый 13.08.2013, 22:40   #6
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию

А вот в лазарусе существует такая функция:
Код:
LazarusResources.Add('TImage','PNG',[
  #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#22#0#0#0#22#8#6#0#0#0#196#180'l;'#0
  +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#4'gAMA'
  +#0#0#177#143#11#252'a'#5#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+'#14#27#0
  +#0#0#25'tEXtSoftware'#0'#155#238'<'#26#0#0#1#202'IDATHK'#189
  +'U;n'#194'@'#16#29#27#127#192#193#193'rA'#135#248'T'#8#165#200#1'r'#8#16'}'
  +#138'@'#148'6'#7#136#148':R'#250'$'#2#162#212#20#148#28#129'#P#'#1#29'Xp'#1...
Есть ли в дельфях что-то на подобии?
LomoCoder вне форума Ответить с цитированием
Старый 13.08.2013, 22:44   #7
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Массив байт из константы грузишь в TBitMap и получаешь свою иконку обратно.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 14.08.2013, 17:33   #8
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Как в DFM файлах:
Код:
 // поток в текст
function BinaryStreamToText(Value: TStream):string;
var
  Text: string;
  Stream: TMemoryStream;
begin
  Result := '';
  if not Assigned(Value) then Exit;
  SetLength(Text, (Value.Size - Value.Position) * 2);
  if Length(Text) > 0 then
  begin
    if Value is TMemoryStream then
      Stream := TMemoryStream(Value)
    else
      Stream := TMemoryStream.Create;

    try
      if Stream <> Value then
      begin
        Stream.CopyFrom(Value, Value.Size - Value.Position);
        Stream.Position := 0;
      end;
      BinToHex(Pointer(Integer(Stream.Memory) + Stream.Position)^, PChar(Text),
               Stream.Size - Stream.Position);
    finally
      if Value <> Stream then
        Stream.Free;
    end;
  end;
  Result := Text;
end;

 // восстанавливает из текста, созданного BinaryStreamToText, в поток 
function ReadBinaryStreame(const S: string; Value: TStream):Integer;
var
  Text: string;
  Stream: TMemoryStream;
  Pos: Integer;
begin
  Result := 0;
  Text := S;
  if Text <> '' then
  begin
    if (Value is TMemoryStream) then
      Stream := TMemoryStream(Value)
    else
      Stream := TMemoryStream.Create;

    try
      Pos := Stream.Position;
      Stream.SetSize(Stream.Size + Length(Text) div 2);
      HexToBin(PChar(Text), Pointer(Integer(Stream.Memory) + Stream.Position)^,
               Length(Text) div 2);
      Stream.Position := Pos;
      if Value <> Stream then
        Value.CopyFrom(Stream, Length(Text) div 2);
      Result := Stream.Size - Pos;
    finally
      if Value <> Stream then
        Stream.Free;
    end;
  end
   else
  Result := 0;
end;
Сохраняешь и загружаешь через поток.
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка изображения Volkogriz Мультимедиа в Delphi 7 28.09.2012 05:17
Загрузка изображения iiunbreakableii Общие вопросы Delphi 1 13.02.2011 20:30
загрузка изображения wlords Помощь студентам 3 24.11.2010 20:52
Загрузка изображения _-Re@l-_ Общие вопросы Delphi 7 31.05.2010 14:54
Загрузка изображения JRcoker Мультимедиа в Delphi 15 04.11.2008 18:32