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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2023, 22:18   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Зашить в программу TJpegImage

Нужно зашить внутрь exe-щника изображение jpg
И потом в нужный момент нужно чтобы программа выкидывала его в буфер обмена
Kronos913 вне форума Ответить с цитированием
Старый 17.09.2023, 23:32   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Каким-то странным образом у меня получилось. Но я уверен, что он с теми еще костылями. Вопрос к знатокам: есть ли возможность сделать это более прямым способом?

Код:
const
   SUPERJPG1_size=57253;
   SUPERJPG1: array [1..SUPERJPG1_size] of byte = (
         255, 216, 255,
(Весь массив прописывать не буду - будет на 100 экранов)

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  p:pointer;
  jpg:TJpegImage;
  st:TMemoryStream;
begin
  jpg:=TJpegImage.Create;

  st:=TMemoryStream.Create;

  st.SetSize(SUPERJPG1_size);
  p:=st.Memory;

  Move(SUPERJPG1, p^, SUPERJPG1_size);

  jpg.LoadFromStream(st);
Может можно как-то напрямую залить с массива в TJpegImage?
Без стрима?
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2023, 00:32   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Код:
Function BMPfromJpgArray(bmp:TBitMap; a:array of byte):boolean;
var
  p:pointer;
  jpg:TJpegImage;
  st:TMemoryStream;
  size1:LongInt;
begin
  try
    jpg:=TJpegImage.Create;
    st:=TMemoryStream.Create;

    size1:=length(a);

    st.SetSize(size1);
    p:=st.Memory;
    move(a, p^, size1);

    jpg.LoadFromStream(st);
    bmp.Assign(jpg);
    result:=true;
  except
    result:=false;
  end;
  jpg.Free;
  st.Free;

end;
Такую процедуру сделал
Тот же вопрос: можно ли как-то упросить код?
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2023, 12:38   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Вопрос к знатокам: есть ли возможность сделать это более прямым способом?
Через ресурсы? Если специального кода для JPEG нет, использовать RT_DATA.

Можно попробовать еще через линкуемую «процедуру», если есть программа/аналог objcopy для формата объектных файлов OMF. Хотя, возможно, зависит от версии Delphi. Если современные версии получили поддержку COFF, можно взять и обычную objcopy от GNU или Microsoft. Но способ через объектник — такое себе, через ресурсы прямее, если только не стоит задача затруднения подмены изображения в exe-шнике — подправить ресурс Resource Hacker-ом сможет любой школьник.
Vapaamies вне форума Ответить с цитированием
Старый 18.09.2023, 19:29   #5
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Цитата:
Через ресурсы? Если специального кода для JPEG нет, использовать RT_DATA.
А как это сделать?

Цитата:
если только не стоит задача затруднения подмены изображения в exe-шнике
А мой метод, с разбором файла на байты - защищает?
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2023, 21:34   #6
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
А мой метод, с разбором файла на байты - защищает?
На самом деле что ресурсы что побайтово, разницы нет, вытащить картинку можно любым редактором ресурсов. Мое мнение, я бы добавил картинку в ресурсы в зашифрованном типе(любой на выбор) а в приложении при гетинге картинки я бы дешифровывал и все.
uberchel вне форума Ответить с цитированием
Старый 19.09.2023, 08:10   #7
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
На самом деле что ресурсы что побайтово, разницы нет, вытащить картинку можно любым редактором ресурсов.
Да ну?!
Vapaamies вне форума Ответить с цитированием
Старый 19.09.2023, 15:56   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

На счет любого редактора ресурсов сомнительно, но по факту если данные никак не шифруются, то найти их не составит труда. Писал как-то программку, которая вытягивала все PNG изображения из файл (в моем случае это была прошивка прибора). Где именно лежали эти изображения в файле, роли не играло, главное что они там были никак не зашифрованы. А программа проходилась по всему файлу от начала и до конца.
Arigato вне форума Ответить с цитированием
Старый 19.09.2023, 16:57   #9
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Писал как-то программку
А теперь читаем, что написано выше.
Vapaamies вне форума Ответить с цитированием
Старый 19.09.2023, 18:04   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

И что же написано выше, чтобы противоречило моим словам?
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает TJpegImage.Assign alexNiko Общие вопросы Delphi 2 06.02.2017 18:54
Помогите с TJpegimage and TMemoryStream tatosha Общие вопросы Delphi 4 01.06.2015 14:01
Зашить стороннее приложение в ресурсы и запускать только в определенном случае Dzib C# (си шарп) 9 05.09.2012 15:50
Проблема с TJPEGImage ssman Мультимедиа в Delphi 2 29.05.2012 18:31
Ошибка конвертации TJPegImage to a TJpegImage Lokos Общие вопросы Delphi 8 20.10.2010 11:00