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

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

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

Author24 — интернет-сервис помощи студентам
Необходимо реализовать что-то на подобие Open Dialoga
Программа для просмотра графических файлов
.
Слева дерево каталогов сделал, но сообразить, как отображать миниатюры картинок содержащихся в выделенном каталоге не получается, подскажите плз.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2018, 11:30
Ответы с готовыми решениями:

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

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

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

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

9
884 / 404 / 174
Регистрация: 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
884 / 404 / 174
Регистрация: 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
5859 / 4588 / 1447
Регистрация: 14.04.2014
Сообщений: 20,351
Записей в блоге: 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
5859 / 4588 / 1447
Регистрация: 14.04.2014
Сообщений: 20,351
Записей в блоге: 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
5859 / 4588 / 1447
Регистрация: 14.04.2014
Сообщений: 20,351
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2018, 13:49
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru