Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385

Работа с *.bmp изображением

19.03.2025, 12:49. Показов 7429. Ответов 72
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сразу говорю, что знания паскаля хуже чем "пишу и читаю со словарём".

Задача считывать пиксели с *.bmp изображений. Максимальный размер изображения 320х240px. Но чувствую, что до этого мне ещё далеко. Поэтому попорядку..

Я нашёл в сети как вывести в поле Memo содержимое текстового файла. Проверил, работает:

Pascal
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
 
begin
   if OpenDialog1.Execute then
  begin
        FName:= OpenDialog1.FileName;
        Memo1.Lines.LoadFromFile(FName);
  end;
end;
Предполагаю, что вывод изображения не сильно будет отличаться.

Поэтому вопросы:
1. Какой элемент создать на форме для загрузки *.bmp для дальнейшего считывания пикселей? (предполагаю, что Image)
2. На что изменить в диалоге строчку "Memo1.Lines.LoadFromFile(FName);" для Image?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2025, 12:49
Ответы с готовыми решениями:

Работа с изображением
Товарищи подскажите как ускорить процесс обновления канвы при просмотре большого объема данных? есть возможность обрабатывать только...

Работа с изображением
Помогите пожалуйста очень нужна помощь, во ту меня есть картинка, нужна теперь кнопка при нажатии на которую картинка отображается сверху...

Работа с изображением
Два вопроса: 1. Ребят есть картинка, надо извлекать из рисунка нужный сектор и показывать его на форме. 2. Можно не меняя формата (png)...

72
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
27.03.2025, 15:27
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от shonty Посмотреть сообщение
Потом по кнопке данные будут копироваться в буфер, и вставляться в другой код.
В какой другой код? В другую твою самописную программу?

Добавлено через 9 минут
Цитата Сообщение от avk959 Посмотреть сообщение
обайтово записывает в поток значение этого указателя
Не указателя, а содержимое этой переменной (области памяти).
0
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
27.03.2025, 15:58  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
В какой другой код? В другую твою самописную программу?
да. в программу для контроллера.
Сейчас я копирую из Edit-а, а хочу из стрима.

Данные в HEX формате, но они строковые. Они уже пересчитаны в новый формат изображения со сжатием.

Я ничего сам не придумывал. Очень много программ именно так и пересчитывают данные для контроллеров, с возможностью скопировать из окна. Могу скринов этих прог накидать. Но они не создают изображения в нужном мне формате.

0
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
27.03.2025, 16:04  [ТС]
Цитата Сообщение от shonty Посмотреть сообщение
Могу скринов этих прог накидать.
Типа такой. Хорошая прога. Вроде на Си написана. Но кнопки "копировать " тоже нет. Приходится мышью выделять..
Да много подобных..
0
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
27.03.2025, 16:21  [ТС]
Это наверное пипец как сложно, из стрима в буфер копировать, иначе уже нашёл бы. Да ладно.. так то работает..
Просто хотел по феншую сделать..

Спасибо всем
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,498
27.03.2025, 17:38
Цитата Сообщение от shonty Посмотреть сообщение
сложно, из стрима в буфер копировать
Я хочу понять, что копировать, бинарные данные, или текстовую строку?

Добавлено через 7 минут
Цитата Сообщение от shonty Посмотреть сообщение
из стрима в буфер копировать
Если текст, почему именно из стрима? Есть же обычная строка (string).
Передача строки в буфер:
Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
  ClipBoard.AsText := Edit1.Text;
end;
Приём строки из буфера:
Delphi
1
2
3
4
procedure TForm1.Button2Click(Sender: TObject);
begin
  Label1.Caption := Clipboard.AsText;
end;
Добавлено через 1 минуту
TMemoryStream хорошо использовать для бинарных данных, например. Для их передачи через буфер нужно указать свой формат данных.

Добавлено через 8 минут
Ну и Ctrl+C/Ctrl+V в самих Edit работает изначально.
0
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
27.03.2025, 17:50  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Я хочу понять, что копировать, бинарные данные, или текстовую строку?
Текстовая строка вида: ".db 0xff, 0xff, 0xff...... Содержимое не обязательно 0хff, но формат такой..
Числа в шестнадцатиричном формате.
0
32 / 26 / 7
Регистрация: 22.02.2019
Сообщений: 111
27.03.2025, 19:20
Лучший ответ Сообщение было отмечено shonty как решение

Решение

Цитата Сообщение от AzAtom Посмотреть сообщение
Не указателя, а содержимое этой переменной (области памяти).
Цитата Сообщение от Виктор Драгунский
– Никакие не сыски. Никакие не хыхки, а коротко и ясно: фыфки!
Цитата Сообщение от shonty Посмотреть сообщение
Текстовая строка вида: ".db 0xff, 0xff, 0xff...... Содержимое не обязательно 0хff, но формат такой..
Числа в шестнадцатиричном формате.
А циклы были при чём?
Проблема XY?
Или строка должна собираться в цикле из отдельных фрагментов, что-нибудь вроде
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var
  ss: TStringStream;
  I: Integer;
  s: string;
begin
  ss := TStringStream.Create;
  try
    for I := 1 to 20 do begin
      s := ' string_#'+I.ToString;
      ss.WriteBuffer(Pointer(s)^, Length(s));
    end;
    ClipBoard.AsText := ss.DataString;
  finally
    ss.Free;
  end;
end;
1
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
27.03.2025, 19:58  [ТС]
Цитата Сообщение от avk959 Посмотреть сообщение
собираться в цикле из отдельных фрагментов
да. обрабатывается изображение попиксельно, и добавляются фрагменты в строку..
Цитата Сообщение от avk959 Посмотреть сообщение
что-нибудь вроде
За код спасибо. Завтра проверю.

Добавлено через 22 минуты
avk959, Вставил в код. Всё работает. Спасибо!!!
0
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
28.03.2025, 05:55  [ТС]
Сразу мне нужно было через TStringStream делать.. А я по незнанию делал всё через @опу.. Теперь и конвертация намного быстрее происходит и результат такой какой нужно.

С изображениями для графических TFT дисплеев закончил.. Отсталось сделать для OLED и LCD с постраничной адресацией.

Всем
1
32 / 26 / 7
Регистрация: 22.02.2019
Сообщений: 111
28.03.2025, 09:15
Цитата Сообщение от shonty Посмотреть сообщение
Сразу мне нужно было через TStringStream делать.. А я по незнанию делал всё через @опу..
А возможно имеет смысл попробовать StringBuilder
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button1Click(Sender: TObject);
var
  sb: TStringBuilder;
  I: Integer;
begin
  sb := TStringBuilder.Create;
  try
    for I := 1 to 20 do
      sb.Append(' string_#'+I.ToString);
    ClipBoard.AsText := sb.ToString;
  finally
    sb.Free;
  end;
end;
1
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
28.03.2025, 10:55  [ТС]
Цитата Сообщение от avk959 Посмотреть сообщение
А возможно имеет смысл попробовать StringBuilder
Ну как бы и за TStringStream спасибо большое А то я на изучение TMemoryStream столько времени в холостую потратил.
И из TStringStream в Memo тоже отлично копируется.

Попробую чуть позже. Сейчас исходники в порядок приведу.
0
32 / 26 / 7
Регистрация: 22.02.2019
Сообщений: 111
28.03.2025, 11:23
Цитата Сообщение от shonty Посмотреть сообщение
я на изучение TMemoryStream столько времени в холостую потратил
Всё это можно было проделать и с TMemoryStream, только телодвижений чуточку больше
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
  s: string;
  I: Integer;
begin
  ms := TMemoryStream.Create;
  try
    for I := 1 to 20 do begin
      s := ' string_#'+I.ToString;
      ms.WriteBuffer(Pointer(s)^, Length(s));
    end;
    SetLength(s, ms.Size);
    Move(ms.Memory^, Pointer(s)^, Length(s));
    ClipBoard.AsText := s;
  finally
    ms.Free;
  end; 
end;
1
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
25.05.2025, 09:39  [ТС]
Я тут тихо сам с собой, с вашего позволения

Ещё и для LCD написал, пока совсем лазарус из головы не вылетел..
В этих дисплеях вывод "постраничный", поэтому не сразу сообразил как нужно изображение обрабатывать..))




Всем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2025, 09:39

Работа с изображением
Нужно програмно в компонет Image вставлять картинку форматов JPG. Если кто-то может обьясните как ето сделать!?

Работа с изображением
Проблема, такого рода, имеется карта объекта, нужно раставить на этой карте активные точки так, что бы при неажатии на них мышкой, открылся...

Работа с изображением
Здравствуйте, дали курсовую, и я понял что нужно много работать с изображениями, не можете подсказать мануалы/статьи/учебники по этой теме.

Работа с прозрачным изображением
Здравствуйте. Подскажите, пожалуйста, можно ли так настроить процедуру OnClick для изображения с прозрачной частью, чтобы программа...

работа с изображением - открыть сохранить
нужно 1) предоставить возможность выбора изображения гдет на венчестере (рабочие расширения приблизительно распрастроненныЕ) 2)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
73
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru