0 / 0 / 0
Регистрация: 18.11.2022
Сообщений: 42
1

Почему вылетает при загрузке картинки в массив?

22.06.2023, 22:51. Показов 1050. Ответов 4

Author24 — интернет-сервис помощи студентам
Что не так с кодом?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void SprGC::loadSprFromImage(const char *path)
{
  SDL_Surface* new_img = IMG_Load(path);
  if (new_img != NULL)
  {
    SDL_Surface* formatted_img = SDL_ConvertSurfaceFormat(new_img, SDL_PIXELFORMAT_ARGB8888, 0);
 
    if (pixels_ != nullptr)
      delete pixels_;
 
    width_ = formatted_img->w;
    height_ = formatted_img->h;
    pixels_ = new uint32_t[width_ * height_];
 
    SDL_LockSurface(formatted_img);
    SDL_memcpy4(pixels_, formatted_img->pixels, width_ * height_);
    SDL_UnlockSurface(formatted_img);
 
    SDL_FreeSurface(new_img);
    SDL_FreeSurface(formatted_img);
  }
}
Добавлено через 16 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void InputOutputGC::drawSpriteWithAlpha(int32_t x, int32_t y, SprGC spr)
{
  uint32_t* pixels = spr.getPixels();
  if (pixels == nullptr)
    return;
 
  int32_t width = spr.getWidth();
  int32_t height = spr.getHeight();
 
  for (int32_t i = 0; i < width; i++)
    for (int32_t j = 0; j < height; j++)
      drawPixelWithAlpha(x + i, j + y, pixels[j * height + i]);
}
Функция drawPixelWithAlpha() работоспособная, которая имеет защиту от неправильного координата.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2023, 22:51
Ответы с готовыми решениями:

Почему FIFA 2002 вылетает при загрузке матча?
Комп у меня нормальный GTA 4 идет!

Кто знает, почему при загрузке Windows невидно картинки, просто тёмный экран?
хто знает почиму при загрузке виндовса невидно картинки что он загружаеться просто тьомный екран, и...

Почему не выводит массив в форме при загрузке файлов
&lt;?php if ($_POST){ print_r($_FILES); } ?&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Загрузка...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб?
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При...

Как сделать, чтобы при загрузке картинки, считывались данные картинки ?
Мне надо сделать так, чтобы при загрузке картинки, считывалось разрешение картинки, и записывалось...

4
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
22.06.2023, 22:57 2
конструктор копирования и оператор = есть?
0
0 / 0 / 0
Регистрация: 18.11.2022
Сообщений: 42
22.06.2023, 23:11  [ТС] 3
Нету
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
23.06.2023, 00:41 4
Лучший ответ Сообщение было отмечено PGStudio как решение

Решение

Цитата Сообщение от PGStudio Посмотреть сообщение
Почему вылетает при загрузке картинки в массив?
При загрузке? В каком месте именно при загрузке?

Цитата Сообщение от PGStudio Посмотреть сообщение
C++
1
2
3
for (int32_t i = 0; i < width; i++)
    for (int32_t j = 0; j < height; j++)
      drawPixelWithAlpha(x + i, j + y, pixels[j * height + i]);
Очевидная ошибка при вычислении индекса массива. Проверяйте.

Например пусть width равно 2, height равно 5. Общий размер массива pixels[] тогда равен 2 * 5 = 10. А у вас в цикле при, скажем, i = 0 и j = 3 будет делаться доступ по какому индексу? Правильно: по индексу 3 * 5 + 0 = 15. Это очевидный вылет за пределы массива.
0
0 / 0 / 0
Регистрация: 18.11.2022
Сообщений: 42
23.06.2023, 17:33  [ТС] 5
Ах! Ты прав!
0
23.06.2023, 17:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.06.2023, 17:33
Помогаю со студенческими работами здесь

Вылетает CS при загрузке карты
Вылетает кс при загрузке карты, причем, на сервера общественные я могу зайти и играть. Но вот когда...

Вылетает ошибка при загрузке
Привет не подскажите в чем проблема 2 дня назад включил ноутбук а мне пишет вот эту ошибку решил...

Вылетает CS GO при загрузке карты
У меня стоит проц Athlon ll x3 450 видяха Radeon 5450 2gb ОЗУ Windows 7 32-bit При загрузке в...

вылетает синий экран при загрузке с утра и при выходи со спящего режима
вылетает синий экран при загрузке с утра и при выходи со спящего режима

Вылетает приложении при загрузке шрифта
Хочу присвоить тексту свой шрифт, например, кладу в assets/fonts/f300.ttf далее код ...

вылетает VS2010 при загрузке решения
ДОбрый день, форумчане. в программировании я сравнительно недавно, и столкнулся с такой проблемой,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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