Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/84: Рейтинг темы: голосов - 84, средняя оценка - 4.57
10 / 9 / 1
Регистрация: 29.05.2010
Сообщений: 15

Программа просмотра изображений

21.12.2010, 16:49. Показов 18084. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем дня! (утра, ночи, вечера)

Задача передо мной следующая - написать программу просмотра изображений средствами C++ Builder 6.
Готового исходника в интернете не нашел, потому пришлось писать самому. Стандартные средства, к сожалению не позволяют прогружать в Image ничего кроме bmp, ico, jpg а надо побольше форматов открывать. Наткнулся на информацию о GDIPlus и всех ее преимуществах. Скачал. Распаковал. Поключил к проекту. Вот только толком разобраться с ней не могу.
Далее код:
C++
1
2
3
Gdiplus::Graphics graphics(Image1->Canvas->Handle);
Gdiplus::Image image(L"123.TIF");
graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());
Использую этот кусок кода, и он открывает мне указанную картиночку.
А как мне сделать чтобы картинка открывалась из указанного в OpenDialog или OpenPiсtureDialog файла?
Запихнуть OpenPictureDialog1->FileName в строку Gdiplus::Image image(L"123.TIF"); мне никак не удалось.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2010, 16:49
Ответы с готовыми решениями:

Программа просмотра изображений
Доброго времени суток. Пожалуйста помогите. Вот задание : Создать программу просмотра изображений. Пользователю необходимо предоставить...

Программа просмотра векторных изображений
Доброго всем дня! (утра, ночи, вечера) Задача передо мной следующая - написать программу просмотра векторных изображений... Готового...

ошибка в программе просмотра изображений
первый раз работаю в C++ Builder. открыла в нем готовый проект, он выдает одну ошибку. в принципе я понимаю, что ему не нравится, но когда...

16
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
21.12.2010, 17:09
в Builder6 можна подключить ещо png и gif. Png можна прямо через image подгружать(открывать), а вот с gif я пока не разобрался.. получаеться только с файла читать ( никак не могу понять как можна считать откуда то с программы его, а хочеться)

вот кидаю "компоненту пнг" и файл GIFimage.pas.
Уже не помню как : но вроде png устанавливать так : вкладка components -> install new components -Выбиаешь PNGImage.pas и в package name пишеш PngImage.bpk. ( в моем случае всё было в одной папке)

а гифку.. просто добавляешь в проект - выбираешь там project->Compile unit. появиться файлик GIFImage.hpp который подключишь к проекту .

загрузка gif с файла :
C++
1
TPicture *Picture = new TPicture();// я это глобально обьявил
в
C++
1
2
3
4
5
6
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
TPicture::RegisterFileFormat(__classid(TGIFImage), "gif", "Files GIF", __classid(TGIFImage));
Image1->Picture->LoadFromFile("run_colobok.gif");
}
Может какие не точности.. но покрайней мере, так я смог добавлять туда эти два формата.
Вложения
Тип файла: zip PNGImage.zip (280.2 Кб, 339 просмотров)
Тип файла: zip GIFImage.zip (75.0 Кб, 179 просмотров)
0
10 / 9 / 1
Регистрация: 29.05.2010
Сообщений: 15
21.12.2010, 17:21  [ТС]
petruchodd, перед тем как использовать GDI, я сначала тоже думал про прямую загрузку в Image без всяких там библиотек. Но с png у меня не получилось, а по gif на маломальски толковые примеры как то не наткнулся. К тому же (если верить инфе) то GDI позволит загружать как минимум bmp, ico, gif, jpg, png, cur, emf, tif а может и еще что. Потому я и решил что использовать лучше ее.
0
10 / 9 / 1
Регистрация: 29.05.2010
Сообщений: 15
25.12.2010, 19:36  [ТС]
вобщем сам уже разобрался. допишу прогу выложу исходники.
0
10 / 9 / 1
Регистрация: 29.05.2010
Сообщений: 15
25.12.2010, 22:31  [ТС]
Лучший ответ Сообщение было отмечено как решение

Решение

вот прога, которую писал и по поводу которой был вопрос. если у кого возникнет подобная проблема смотрите исходники. кроме того в программе реализовано масштабирование изображения, слайд-шоу, поворот изображения, вывод на печать ну и тд. программка еще не до конца написана так что имейте ввиду. Реализованио на c++ builder 6, все компоненты и библиотеки стандартные кроме gdiplus

программа просмотра изображений.zip


ЗЫ буду благодарен если сообщите о найденных косяках, и тем более если скажите как их исправить.
ЗЫ2 не буду благодарен за излишнюю критику
5
 Аватар для petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
25.12.2010, 22:40
Цитата Сообщение от Medved[32]rus Посмотреть сообщение
вот прога, которую писал и по поводу которой был вопрос. если у кого возникнет подобная проблема смотрите исходники. кроме того в программе реализовано масштабирование изображения, слайд-шоу, поворот изображения, вывод на печать ну и тд. программка еще не до конца написана так что имейте ввиду. Реализованио на c++ builder 6, все компоненты и библиотеки стандартные кроме gdiplus

Вложение 56031


ЗЫ буду благодарен если сообщите о найденных косяках, и тем более если скажите как их исправить.
ЗЫ2 не буду благодарен за излишнюю критику
Прикольно . мне нравиться. Пока полностью не тестил - но интерфейс можна было бы зделать "красивее" не в обиду. Просто вид как будто вин95
А так вообще классно.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.12.2010, 23:43
- Уменьшить - сначала увеличивает до оригинального размера - и только после второго клика - уменьшает - что есть неожиданно.
- Поворот - если изображение больше окна - уменьшает до размеров окна - что есть неожиданно.
- Печать - окно сохранения документа в tiff - что есть совсем неожиданно, поскольку ожидается окно настройки задекларированой печати ( и почему только в tiff , который даже печатники принимают все неохотнее, но это так, к слову - или имеется ввиду "Печать в файл" ?) .
- "Сохранить" - окно "Сохранить как" - что есть немножко неожиданно.
- Автопросмотр - я бы совместил с кнопкой Начать - . Или обозвал "Режим автопросмотра" и сделал "залипание" и "отлипание" по "Прекратить" , а то путано как-то получается.
- Нет поддержки animated gif .
- В окошке перехода по файлам - хорошо бы открывать "в_один_клик" .
- "Бог тебе в помощь!!!" - спасибо, конечно, но смахивает на хамство, т.е., шутка не удалась.
Как исправить - код пока не смотрел.
Критика конструктивная, ничего личного, так что - без обид, ОК ?
По поводу комплиментов - см. пост petruchodd.

Добавлено через 8 минут
в RAD XE проект открылся зараз, но при компиляции:
[BCC32 Error] GdiplusGraphics.h(34): E2015 Ambiguity between 'Gdiplus::Graphics::Graphics(void *) at c:\program files\embarcadero\rad studio\8.0\include\windows\sdk\GdiplusGr aphics.h:54' and 'Gdiplus::Graphics::Graphics(void *,int) at c:\program files\embarcadero\rad studio\8.0\include\windows\sdk\GdiplusGr aphics.h:73'

[BCC32 Error] Unit1.cpp(84): E2015 Ambiguity between '_fastcall Sysutils::IntToStr(int) at c:\program files\embarcadero\rad studio\8.0\include\windows\rtl\SysUtils. hpp:2183' and '_fastcall Sysutils::IntToStr(__int64) at c:\program files\embarcadero\rad studio\8.0\include\windows\rtl\SysUtils. hpp:2186'
- кто что посоветует ?

Добавлено через 4 минуты
ругается на строки
C++
1
2
3
4
5
6
7
8
   static Graphics* FromHDC(IN HDC hdc)
    {
        return new Graphics(hdc);
    }
// и
Form1->StatusBar1->Panels->Items[2]->Text=
       "Размер - "+  IntToStr(image->GetWidth())+"x"+
       IntToStr(image->GetHeight());
(ну неужели в школе не учили разбивать такие длинные выражения по "не более 80 символов" ... )
1
10 / 9 / 1
Регистрация: 29.05.2010
Сообщений: 15
26.12.2010, 00:11  [ТС]
Цитата Сообщение от petruchodd Посмотреть сообщение
... Пока полностью не тестил - но интерфейс можна было бы зделать "красивее" не в обиду. Просто вид как будто вин95...
ну в плане дизайна у меня руки еще кривее, так что стараюсь обеспечить хотя бы функциональность и работоспособность.

Цитата Сообщение от LK Посмотреть сообщение
- Уменьшить - сначала увеличивает до оригинального размера - и только после второго клика - уменьшает - что есть неожиданно.
- Поворот - если изображение больше окна - уменьшает до размеров окна - что есть неожиданно.
- Печать - окно сохранения документа в tiff - что есть совсем неожиданно, поскольку ожидается окно настройки задекларированой печати ( и почему только в tiff , который даже печатники принимают все неохотнее, но это так, к слову - или имеется ввиду "Печать в файл" ?) .
- "Сохранить" - окно "Сохранить как" - что есть немножко неожиданно.
- Автопросмотр - я бы совместил с кнопкой Начать - . Или обозвал "Режим автопросмотра" и сделал "залипание" и "отлипание" по "Прекратить" , а то путано как-то получается.
- Нет поддержки animated gif .
- В окошке перехода по файлам - хорошо бы открывать "в_один_клик" .
- "Бог тебе в помощь!!!" - спасибо, конечно, но смахивает на хамство, т.е., шутка не удалась.
Как исправить - код пока не смотрел.
Критика конструктивная, ничего личного, так что - без обид, ОК ?
По поводу комплиментов - см. пост petruchodd.

Добавлено через 8 минут
в RAD XE проект открылся зараз, но при компиляции: - кто что посоветует ?

Добавлено через 4 минуты
ругается на строки
C++
1
2
3
4
5
6
7
8
   static Graphics* FromHDC(IN HDC hdc)
    {
        return new Graphics(hdc);
    }
// и
Form1->StatusBar1->Panels->Items[2]->Text=
       "Размер - "+  IntToStr(image->GetWidth())+"x"+
       IntToStr(image->GetHeight());
(ну неужели в школе не учили разбивать такие длинные выражения по "не более 80 символов" ... )
спасибо за замечания, часть исправил сразу же, а с остальными поковыряюсь завтра и выложу исходники
0
PRONGS
11.01.2011, 21:07
поделись исправленным исходником, а то чет ошибку не удалось у меня исправить
10 / 9 / 1
Регистрация: 29.05.2010
Сообщений: 15
28.01.2011, 10:33  [ТС]
Исходники.zip
4
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
28.01.2011, 11:38
По интерфейсу
1. Хорошо бы как-то выделять активную кнопку, потому как путает
2. Если уж так задумано, то радиокнопки , если не нажата кнопка Автопросмотр, должны быть не активными, а то
3. Нет хинтов у Play-Pause-Stop
4. При наведенни курсора на кнопку сделайте "длинные" хинты в панели состояния
5. В меню Действия - имхо, больше подходит что-то типа Просмотр - нет пункта Автопросмотр с подпунктами Play-Pause-Stop
6. Хорошо бы PopupMenu с дублированием меню Действия при правом клике на картинке
7. Двойной клик для открытия файла - сподручнее - один клик

Добавлено через 1 минуту
При размерах картинки - больше размеров окна - хорошо бы иметь возможность двигать картинку курсором типа "Лапа" , а не только скролбарами

Добавлено через 4 минуты
если картинка больше окна - очень долго поворачивает - батон Поворот на 90•.
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
27.01.2013, 10:35
Здравствуйте!
Помогите, пожалуйста! У меня не работает выложенная здесь программа. Ошибка в функции
C++
1
 Gdiplus::Graphics graphics(Buf->Canvas->Handle);
Требует еще один параметр типа инт. Передаю 1.
C++
1
 Gdiplus::Graphics graphics(Buf->Canvas->Handle,1);
Когда открываю изображения, вместо картинки появляется только светлый прямоугольник, соответствующий размерам изображения. В чем может быть проблема?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
28.01.2013, 19:04
Simply me, открой файл GdiplusGraphics.h, и посмотри, в 74 строке закомментировано ли у тебя вот это значение по умолчанию, или нет:


В новых версиях, как видишь, оно закомментировано...
2
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
29.01.2013, 03:25
Недостатки:
- Окно всегда на весь экран
- При картинке больше окна, когда двигаешь скролбары картинка смещается только при отпускании скролов, если будет смещаться в процессе движения скролов будет удобней.
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
29.01.2013, 08:11
UI, спасибо! Действительно, было не закомментировано. Теперь работает)
0
AuToSaVe
22.05.2013, 00:55
Ребята помогите, есть программа просмотра изображений, но не могу вставить функцию рисования линии ( то есть нужно провести линию из точки А в точку Б) иными словами сделать пометку на картинке, помогите решить проблему, исходник прикреплен.
Вложения
Тип файла: rar Project1.rar (6.72 Мб, 208 просмотров)
0 / 0 / 0
Регистрация: 31.07.2016
Сообщений: 1
25.07.2019, 09:59
А мне не помогло только комментирование данного участка.
Ошибка вылезла "[BCC32 Error] E2015 Ambiguity between SysUtils.hpp:2363"
Я сделал так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
int rt,yu;
AnsiString RAZMER1, RAZMER2;
rt = image->GetWidth();
RAZMER1 = IntToStr(rt);
yu = image->GetHeight();
RAZMER2 = IntToStr(yu);
 
Form1->StatusBar1->Panels->Items[2]->Text="Размер - " + RAZMER1 + "x"+RAZMER2;
 
//Вот строчка на которой ругался компилятор
//Form1->StatusBar1->Panels->Items[2]->Text="Размер - " + IntToStr(image->GetWidth()) + "x"+IntToStr(image->GetHeight());

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

Простая программа для просмотра списка файлов
Доброго времени суток! Обращаюсь к вам как специалистам программистам, и профессионалам своего дела. Так как таковым не являюсь, и...

Программа просмотра изображений.
Добрый день. Мне нужно сделать программу для просмотра изображений с функцией масштабирования, с поддержкой всех известных форматов, таких...

Программа для просмотра изображений
Здравствуйте есть код программы, нужно добавить в него поиск изображений на жёстком диске и определение дубликатов, есть варианты? ...

Программа для просмотра изображений
Люди может кто-нибудь подсказать ссылочку на готовую программу для просмотра изображений, хоть даже на самую простую! Я недавно начал...

Программа для просмотра изображений
Всем привет, есть вот такой вот код: namespace WindowsFormsApplication1 { public partial class Form1 : Form { ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru