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

Можно ли создать массив PngImage?

30.04.2012, 12:44. Показов 875. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
при подключенной библиотеке "pngimage.hpp"
запись типа
C++
1
TPngImage *test = new TPngImage[30];
ошибок при компиляции не выдаёт, однако при запуске Access Violation
есть ли другой способ объеденить множество объектов TPngImage ну или TBitmap?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2012, 12:44
Ответы с готовыми решениями:

Если можно создать массив TButton, то как создать массив их событий?
Пишу программу в которой много однообразных Едитов и кнопок. Чтобы "облегчить сбе жизнь" создал MyEdit: array of TEdit. Аналогично...

можно ли и если можно, то как в сессии создать двумерный массив ?&
нужен сабж

О потоках std::thread: можно ли вложить потоки друг в друга и можно ли создать динамический массив потоков?
1) Могу ли я вложить потоки друг в друга? 2) Могу ли я создать динамический массив потоков, каким-либо образом инициализировав их потом в...

6
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
30.04.2012, 13:03
Здесь и нет ошибок. Ошибка у вас где-то в другом месте, скорее всего, обращение к массиву по неверному индексу - test[30] или еще как....
1
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
30.04.2012, 13:22
fghjk, покажите код, где выпадает? исключение говорит об одном, что ты обращаешься к неинициализированной области памяти...

можно создать массив указателей к примеру:
C++
1
2
3
4
5
  void** array = (void**)malloc(5 * sizeof(TImage*));
  for(int i = 0; i < 5; i++)
  {
    array[i] = (void*)(new TImage(NULL));
  }
так обращение идет к объектам внутри массив:
C++
1
2
3
 TImage* image = static_cast<TImage*>(array1[0]);
  if(image != NULL)
    image->Picture->LoadFromFile("D:\\addClient.bmp");
а так освобождается память:
C++
1
2
3
4
5
  for(int i = 0; i < 5; i++)
  {
    delete array1[i];
  }
  free(array1);
1
3 / 3 / 2
Регистрация: 04.12.2011
Сообщений: 76
30.04.2012, 22:17  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Здесь и нет ошибок. Ошибка у вас где-то в другом месте, скорее всего, обращение к массиву по неверному индексу - test[30] или еще как....
но я даже не обращаюсь к нему, просто вот в программе одна запись
C++
1
TPngImage *test = new TPngImage[30];
и всё

Добавлено через 1 минуту
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
fghjk, покажите код, где выпадает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <vcl.h>
#pragma hdrstop
#include "pngimage.hpp"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
    : TForm(Owner)
{
 TPngImage *test = new TPngImage[30];
}
//---------------------------------------------------------------------------
вот весь код

Добавлено через 1 минуту
Lord_Voodoo, спасибо за код.
сейчас буду пробовать

Добавлено через 6 часов 24 минуты
не могу понять как выводить изображение
C++
1
Image1->Canvas->Draw(0,0,image);
так не получается

если модернизировать код (наверно это очень глупо)
C++
1
2
3
4
5
6
7
8
 TPngImage** array = (TPngImage**)malloc(5 * sizeof(TPngImage*)); //тут было void не пойму почему
  for(int i = 0; i < 5; i++)
  {
    array[i] = (TPngImage*)(new TImage(NULL)); //выделяем память для массива и заполняем его NULL?
  }
  TPngImage* image = static_cast<TPngImage*>(array[0]); // тоже не понимаю для чего это преобразование 
   image->LoadFromFile("qwe.png");
    Image1->Canvas->Draw(0,0,image);
не выводит ничего =(

прошу объяснить пожалуйста

Добавлено через 2 часа 13 минут
господа программисты!!! ответьте кто-нибудь!!!

Добавлено через 9 минут
всё, разобрался с пнг врятли получится, а с битмапом всё просто
C++
1
2
3
4
5
6
7
8
void** array = (void**)malloc(5 * sizeof(Graphics::TBitmap*));
  for(int i = 0; i < 5; i++)
  {
    array[i] = (void*)(new Graphics::TBitmap());
  }
  Graphics::TBitmap* image2 = static_cast<Graphics::TBitmap*>(array[0]);
  image2->LoadFromFile("qwe.bmp");
  Image1->Canvas->Draw(0,0,image2);
если кто-то знает как с пнг привидите пример!!
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
30.04.2012, 22:21
fghjk, есть там справка и примеры, прямо в папке компонента... но, пока я его уговорил поставиться, то уже не было никакого желания разбираться, что это за беда вообще... посмотрите там, может чем и поможет...

еще хотелось бы поправить(само приведение вызывает какие-то внутренние сомнения, но да ладно):
C++
1
array[i] = (TPngImage*)(new TImage(NULL));
это не выделение памяти, а создание объекта и запись его адреса в заданную ячейку массива... а параметр, который я передаю в виде NULL, - это вообще владелец объекта...

и почему вы объявляете массив TPngImage, а создаете объекты TImage и приводите его к TPngImage? какой смысл? я привел просто пример, как записать массив указателей на объекты TImage, а вам надо было переделать под свои нужды, а не копипастить
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
30.04.2012, 22:29
Не шибко понимаю нужду во всех этих приведениях типов...
Вот так, просто и коротко:
C++
1
2
3
4
5
6
7
    TPngImage *png_arr[5] = {NULL};
    for( int i = 0; i < 5; png_arr[i] = new TPngImage( ), i++);
    
    png_arr[0]->LoadFromFile("qwe.png");
    Image1->Canvas->Draw( 0, 0, png_arr[0] );
    // ...
    for( int i = 0; i < 5; delete png_arr[i], png_arr[i] = NULL, i++ );
1
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
30.04.2012, 22:34
BRcr, я вообще приведение делал, потому что у меня был массив void*, а уж зачем ТС сделал эту всю кашу из моего творчества и своих догадок...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2012, 22:34
Помогаю со студенческими работами здесь

Массив: Как можно создать массив, не прописывая каждую строку, а с применением цикла?
Добрый день. Имеется массив: var priceList = { &quot;1644&quot; : {&quot;id&quot; : &quot;1644&quot;, &quot;subid&quot; : {}, &quot;name&quot; : &quot;Комбинезон &quot; +...

PngImage
Добрый день всем Пойск по форуму не помог У меня стойт AlphaSkins на BC6 ,ложу на форму ТImage и загружаю туда Png и добавляю к проекту...

Можно ли создать массив строк?
Я хочу создать массив состоящий из строк типом char? Можно ли и как это сделать? P.S эх где же ты мой 1c :)

Можно ли создать динамический массив?
можно ли на авс паскале работать с динамическим массивом?

Можно ли создать массив словарей
Всем доброе. Есть 5 словарей вида Dictionary&lt;string, List&lt;string&gt;&gt; D1 = new Dictionary&lt;string, List&lt;string&gt;&gt;(); Нужно эти словари...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru