С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
29 / 29 / 19
Регистрация: 18.11.2012
Сообщений: 338
Записей в блоге: 1
1

Программа для просмотра графических файлов

08.01.2018, 11:30. Показов 2195. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо реализовать что-то на подобие Open Dialoga
Программа для просмотра графических файлов
.
Слева дерево каталогов сделал, но сообразить, как отображать миниатюры картинок содержащихся в выделенном каталоге не получается, подскажите плз.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2018, 11:30
Ответы с готовыми решениями:

Разработка программы просмотра графических файлов ._
Доброго времени. Мне задали курсовую работу в программной среде Delphi. В работе необходимо...

Программа для графических построений в Делфи
Нужна программа,в которой можно построить окружность от руки(не надо вводить никаких данных...

Программа записи и просмотра графических BMP-файлов
Собственно в названии и вся просьба. Может у кого-нибудь из вас есть готовый проект с исходниками...

Разработать приложение для просмотра графических файлов
Задача 1. Разработать приложение для просмотра графических файлов

9
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
08.01.2018, 11:35 2
Все просто: определяем, что файл относится к графическому типу (по расширению), загружаем файл, конвертируем в битмап, уменьшаем размеры до размера миниатюры. Дальше в зависимости от желания: либо пихаем каждый рисунок в свой TImage, либо рисуем эту миниатюру на канву компонента. Память, конечно, это подожрет, но не так, чтобы критично.
0
29 / 29 / 19
Регистрация: 18.11.2012
Сообщений: 338
Записей в блоге: 1
08.01.2018, 11:47  [ТС] 3
Цитата Сообщение от Nanotentacle Посмотреть сообщение
либо пихаем каждый рисунок в свой TImage, либо рисуем эту миниатюру на канву компонента
а на какой компонент это все ложить, чтобы со скролом было и отображалось, как на картинке списком из кучи картинок?
0
882 / 404 / 173
Регистрация: 20.10.2016
Сообщений: 1,828
08.01.2018, 11:54 4
Если память мне не изменяет, подобный функционал был у TListView. Не ручаюсь, но посмотреть в сторону этого компонента стоит. В любом случае, ничего не мешает написать даже самописный компонент на основе TImage, например. Получится не сильно сложно (но, опять же, не сильно хорошо скажется на оперативной памяти).

Добавлено через 4 минуты
А чем TOpenPictureDialog не нравится?
0
29 / 29 / 19
Регистрация: 18.11.2012
Сообщений: 338
Записей в блоге: 1
08.01.2018, 11:58  [ТС] 5
Цитата Сообщение от Nanotentacle Посмотреть сообщение
А чем TOpenPictureDialog не нравится?
мне надо это все на форме показывать без диалогов
0
5869 / 4597 / 1448
Регистрация: 14.04.2014
Сообщений: 20,401
Записей в блоге: 20
08.01.2018, 12:57 6
listview имеет всю нужную функциональность, кроме основной - вы должны сами формировать картинки по файлам
0
29 / 29 / 19
Регистрация: 18.11.2012
Сообщений: 338
Записей в блоге: 1
10.01.2018, 13:02  [ТС] 7
Цитата Сообщение от krapotkin Посмотреть сообщение
вы должны сами формировать картинки по файлам
не получается вставить через imagelist в listview картинку, вставляется только оч маленькая, а если размеры imagelist меняю, то вообще не вставляется.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var
  map: TBitmap;
  x1, y1, x2, y2: Integer;
  fact1, fact2: Real;
  jpeg_map: TJpegImage;
  sourse_map:TBitmap;  it:TListItem;      il:TImageList;
begin
  jpeg_map := TJpegImage.Create;
  jpeg_map.LoadFromFile('c:\test\gzYRi-M9utg.jpg');
  sourse_map := TBitmap.Create;
  sourse_map.Width := jpeg_map.Width;
  sourse_map.Height := jpeg_map.Height;
  sourse_map.Assign(jpeg_map);
  jpeg_map.Free;
  map := TBitmap.Create;
  // размеры исходного изображения
  x1 := sourse_map.Width;
  y1 := sourse_map.Height;
  //размеры области, в которую помещается изображение
  il:=TImageList.CreateSize(60,60); // с этим не вставляется
  x2 := il.Width;//Self.ClientWidth;
  y2 := il.Height;//Self.ClientHeight;
  // вычисляем отношение размеров
  fact1 := x2 / x1;
  fact2 := y2 / y1;
  // берём наименьший коэффициент, чтобы на него домножить размеры исходного изображения
  If fact2 < fact1 then
    fact1 := fact2;
  // а дальше уже отображение
//  Self.Canvas.Brush.Color := clGray;
//  Self.Canvas.FillRect(Self.Canvas.ClipRect);
  // если картинка больше заданной области, то сжимаем её
  If fact1 < 1.0 then
    begin
      map.Width := Round(x1 * fact1);
      map.Height := Round(y1 * fact1);
      map.Canvas.StretchDraw(map.Canvas.ClipRect, sourse_map);
    end
  else // иначе - оставляем такой, какая она есть (чтобы не расширять)
    map.Assign(sourse_map);
  // отображаем:
//  Self.Canvas.Draw((Self.ClientWidth - map.Width) div 2,
//      (Self.ClientHeight - map.Height) div 2, map);
  ListView1.Clear;
 
  il.Add(map,nil);
//  il.Count;
      ListView1.LargeImages:=il;
      it:=ListView1.Items.Add;
      it.ImageIndex:=il.Count-1;
//  ImageList1.Add(map,nil);
//ListView1.LargeImages:=ImageList1; тут вставляется маленькая картинка
//      it:=ListView1.Items.Add;
//      it.ImageIndex:=ImageList1.Count-1;
 
  map.Free;
0
5869 / 4597 / 1448
Регистрация: 14.04.2014
Сообщений: 20,401
Записей в блоге: 20
10.01.2018, 13:26 8
ImageList содержит картинки одного и того же размера
при изменении размера IL все содержимое очищается
поэтому вам нужно либо хранить несколько ImageList разных размеров, либо массив(список) больших битмапов и каждый раз заполнять IL заново картинками нужного размера, создавая их из больших
0
29 / 29 / 19
Регистрация: 18.11.2012
Сообщений: 338
Записей в блоге: 1
10.01.2018, 13:35  [ТС] 9
Цитата Сообщение от krapotkin Посмотреть сообщение
вам нужно либо хранить несколько ImageList разных размеров, либо массив(список) больших битмапов и каждый раз заполнять IL заново картинками нужного размера, создавая их из больших
я же создаю imagelist
il:=TImageList.CreateSize(60,60)
размером 60на 60, причем таким способом вставляется картинка, но не изменяется рамзер самой картинки
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
  j:tjpegimage;
  il:TImageList;
  bm, mask: TBitmap;      it:TListItem;
begin
  ImageList1.Clear;
  ListView1.Clear;
  il:=TImageList.CreateSize(60,60);
 
  bm:=TBitmap.Create;
//  Image1.Picture.LoadFromFile('c:\test\z.bmp');
  bm.LoadFromFile('c:\test\z.bmp');
  il.Add(bm,nil);
//  ImageList1.Insert(0, Image1.Picture.Bitmap,nil);
 
      it:=ListView1.Items.Add;
      it.ImageIndex:=il.Count-1;
      ListView1.LargeImages:=il;
//      ImageList1.FileLoad(rtBitmap,'c:\test\1.bmp',clBtnFace);
//      ShowMessage(IntToStr(ImageList1.Count));
//      sImage1.ImageIndex:=1;
и получается, что не вся картинка влазит,а предыдущим методом, форматируется размер картинки толькко под самый мелкий
0
5869 / 4597 / 1448
Регистрация: 14.04.2014
Сообщений: 20,401
Записей в блоге: 20
10.01.2018, 13:49 10
а почему должен изменяться размер картинки-то ?

вообще мой совет - разбейте свою процедуру на более мелкие. все станет в 100 раз понятнее

Delphi
1
2
3
4
ResizeIL(size);
b:=LoadBitmap();
resizeBitmap(b,size);
IL.add(b);
0
10.01.2018, 13:49
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2018, 13:49
Помогаю со студенческими работами здесь

Создать форму для просмотра графических файлов
Создать форму для просмотра графических файлов, используя: (Image, OpenDialog, SaveDialog, Button,...

Написать программу для просмотра графических файлов, расположенных в определенном каталоге
Используя ИСР Delphi, разработать графический интерфейс и написать программу для просмотра...

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

Программа для вывода на форме графических файлов
Прошу помощи в создании программы для вывода на форме графических файлов. Чтобы при перемещении...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru