Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420

Использование глобального Bitmap

15.09.2018, 20:13. Показов 5988. Ответов 4

Студворк — интернет-сервис помощи студентам
Всем привет!
Объявляю глобальный bitmap, в который загружаю bmp-файл.
А из bitmap изображение загружаю в Image1, но где-то совершил ошибку, так как:
1. Выскакивает [Linker Warning] Public symbol '_bitmap; defined in both module C:\PROGRAM ...\UNIT1.OBJ and
C:\PROGRAM ...\DAT.OBJ
2. Изображение из файла загружается в bitmap в описании функции F1 (определяю по ширине и высоте bitmap), а при использовании функции F1 изображения уже нет, и, соответственно нет загрузки в Image1

Какие у кого будут соображения по выходу из сложившейся ситуации?
Исходники файлов прилагаю

========== Unit1.cpp ==========
C++
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
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "dat.h"
//----------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//----------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//----------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //Здесь bitmap->Width=0, bitmap->Height=0
 
  //Загрузка графического файла в bitmap
  F1("111.bmp");
 
  //Здесь bitmap->Width=0, bitmap->Height=0
 
  //Вывод изображения
  Image1->Canvas->Draw(0, 0, bitmap);        
}
//----------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete bitmap; //удаляем глобальный bitmap
}
========== Unit1.h ==========
C++
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
#ifndef Unit1H
#define Unit1H
//----------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//----------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TImage *Image1;
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall FormDestroy(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//----------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//----------------------------------------------------------
extern Graphics::TBitmap *bitmap = new Graphics::TBitmap;
#endif
========== dat.cpp ==========
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <vcl.h>
#pragma hdrstop
 
#include "dat.h"
#include "Unit1.h"
 
//----------------------------------------------------------
#pragma package(smart_init)
 
//ЗАГРУЗКА ГРАФИЧЕСКОГО ФАЙЛА В Bitmap
void F1(char *filename)
{
  //Здесь bitmap->Width=0, bitmap->Height=0
 
  bitmap->LoadFromFile(filename); //загрузка изображения из файла в bitmap
 
  //Здесь bitmap->Width=500, bitmap->Height=800
 
}//end NLoadFileToBitmap()
========== dat.h ==========
C++
1
2
3
4
5
6
7
8
#ifndef datH
#define datH
//----------------------------------------------------------
 
//ЗАГРУЗКА ГРАФИЧЕСКОГО ФАЙЛА В Bitmap
void F1(char *filename);    
 
#endif
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.09.2018, 20:13
Ответы с готовыми решениями:

Использование bitmap
Мне нужно хранить копию изображения, которое находится на клиентской области и по надобности замещать им изменения на области. Не...

Использование Bitmap в графическом редакторе
Здравствуйте. Делаю графический редактор и интересует такой вопрос. Когда и где лучше работать с графикой используя конструкции по типу ...

Использование глобального "request"-а
Привет всем! У меня такой вопрос: Можно ли создать в JSP глобальный request и использовать этот обьект везде, не передавать...

4
59 / 54 / 34
Регистрация: 18.04.2014
Сообщений: 122
15.09.2018, 22:16
Лучший ответ Сообщение было отмечено Инженер_3 как решение

Решение

Инженер_3, проблема в этой строке
C++
1
extern Graphics::TBitmap *bitmap = new Graphics::TBitmap;
Нужно объявление оставить
C++
1
extern Graphics::TBitmap *bitmap;
а определение (инициализацию) добавить в cpp файл:
C++
1
Graphics::TBitmap *bitmap = new Graphics::TBitmap;
1
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
15.09.2018, 22:18
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Объявляю глобальный bitmap,
Вот вам и ошибка. Глобальные переменные - зло.
0
165 / 114 / 59
Регистрация: 12.07.2018
Сообщений: 277
15.09.2018, 22:20
Инженер_3, чтобы исправить ошибки надо строку 60 заменить на

C++
1
extern Graphics::TBitmap *bitmap;
после строки 10 вставить

C++
1
Graphics::TBitmap *bitmap;
после строки 14 вставить

C++
1
bitmap = new Graphics::TBitmap;
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
16.09.2018, 10:40  [ТС]
Mathist, Спасибо, всё работает великолепно.

Бард, При таком варианте видимость bitmap только в Unit1, а в dat выскакивает ошибка из-за неопределения bitmap.

Цитата Сообщение от JaponDemon Посмотреть сообщение
Вот вам и ошибка. Глобальные переменные - зло.
Чем это объясняется? Я читал, что глобальные переменные нужно использовать в крайней необходимости, особенно, если проект большой и в нём задействовано много программистов, наверное, что бы не было имён с одинаковым именем.
Но в мелких проектах это легко отслеживается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.09.2018, 10:40
Помогаю со студенческими работами здесь

создание Clone с Bitmap меньшего размера с сохранением изначальных габаритов Bitmap
Взялся за GDI, столкнулся с проблемой. Есть &quot;бегущая строка&quot;, она движется справа налево. Если перерисовывать по пикселям...

Как создать bitmap из области (по координатам пикселей) другого bitmap
Здравствуйте. Подскажите пожалуйста как создать bitmap из области(по координатам пикселей) другого bitmap. Вообщем обрезать.

Получение фото с веб камеры, занесение его в Bitmap и преобразование Bitmap в массив
В общем необходимо подключиться к веб камере сделать снимок и отправить его в сеть. Задачу я разделил на несколько этапов. 1. Сам...

Нарисовать прошлый Bitmap на новом так, чтобы небыл растянут рисунок, если новый Bitmap больше размером
Короче пытался сделать такое дело: Рисую фигуры на форме, когда отпускаю левую кнопку мыши (когда кнопка зажата, то растягивается например...

BitMap Основные функции + работа в Bitmap
Я наткнулся на пару проблем не известных для меня. 1. Как поставить &quot;Настройки компонента&quot; чтобы они работали в BitMap 2. Как...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru