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

Как копировать определенную часть изображения stb_image

04.08.2022, 15:35. Показов 1552. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть такой код но при его использовании квадрат вместо текстуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned char *image,*frame;
image = stbi_load(it.value()["path"].get<std::string>().c_str(), &width, &height, &channels, 0);
        for(int i = 0;i < it.value()["frames"].get<int>();i++){
            for (int h = height / it.value()["frames"].get<int>() * i; h < height / it.value()["frames"].get<int>() * (i + 1); h++) {
                for (int w = 0; w < width; w++) {
                    for (int c = 0; c < channels; c++) {
                        frame[channels * (h * width + w) + c] = image[channels * (h * width + w) + c];
                    }
                }
            }
       }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2022, 15:35
Ответы с готовыми решениями:

как копировать произвольную часть изображения?
Доброго времени суток! Нужно что-то вроде фотошопного лассо, т.е. чтобы можно было мышью выделить...

Как копировать часть кода HTML
Всем привет,я тут решил попробовать программку сделать которая при нажатии кнопки будет выдавать...

Как копировать часть Image в clipboard?
Как скопировать прямоугольную часть Image в clipboard? Если что не пинайте, я чайник :)

Как копировать часть Png картинки в Timage
Вобщем беда как всегда с прозрачностью при копировании выводятся на ура TPngImage *p = new...

4
6087 / 3446 / 1401
Регистрация: 07.02.2019
Сообщений: 8,756
04.08.2022, 17:02 2
Цитата Сообщение от qwaz Посмотреть сообщение
*frame;
память выделять будет пушкин?
Цитата Сообщение от qwaz Посмотреть сообщение
it.value()["frames"].get<int>()
что это за значение?

Пример копирования региона:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <memory>
#include <algorithm>
 
struct img_data_ref
{
  const unsigned char* pixels;
  int width;
  int height;
  int channels;
};
 
struct rect
{
  int left;
  int bottom;
  int width;
  int height;
 
  bool contains(rect const &r) const
  {
    return left <= r.left &&
           bottom <= r.bottom &&
           left + width >= r.left + r.width &&
           bottom + height >= r.bottom + r.height;
  }
 
  bool is_valid() const
  {
    return width > 0 && height > 0;
  }
};
 
std::unique_ptr<unsigned char[]> copy_sub_image(img_data_ref const& img, rect const& rec)
{
  std::unique_ptr<unsigned char[]> result;
  rect img_rec{0, 0, img.width, img.height};
  if (rec.is_valid() && img_rec.is_valid() && img_rec.contains(rec))
  {
    int dst_stride = img.channels * rec.width;
    result = std::make_unique<unsigned char[]>(dst_stride * rec.height);
    int src_stride = img.channels * img.width;
    auto* src = img.pixels + src_stride * rec.bottom + rec.left * img.channels;
    auto* dst = result.get();
    for (int c = rec.height; c--;)
    {
      std::copy(src, src + dst_stride, dst);
      src += src_stride;
      dst += dst_stride;
    }
  }
  return result;
}
0
1 / 1 / 0
Регистрация: 22.12.2020
Сообщений: 140
09.08.2022, 07:31  [ТС] 3
Мне бы вариант более понятный. Я делаю анимацию и все кадры расположены в 1 файле. Кадры идут сверху вниз друг за другом
и нужно копировать каждый кадр из файла для его загрузки в память видеокарты
.
0
Модератор
Эксперт Java
2558 / 1094 / 375
Регистрация: 11.08.2017
Сообщений: 3,331
09.08.2022, 10:37 4
Лучший ответ Сообщение было отмечено qwaz как решение

Решение

Цитата Сообщение от qwaz Посмотреть сообщение
нужно копировать каждый кадр из файла для его загрузки в память видеокарты
Спрашивается зачем? Имхо куда проще и понятнее загрузить изображение целиком и создать для него uv координаты и при воспроизведении менять не картинки а координаты, даже побыстрее должно быть.
1
1 / 1 / 0
Регистрация: 22.12.2020
Сообщений: 140
10.08.2022, 09:38  [ТС] 5
А можно пример какие координаты должны быть если есть два кадра?
0
10.08.2022, 09:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2022, 09:38
Помогаю со студенческими работами здесь

Как извлечь определенную часть ссылки
Как извлечь нужный текст из строки (типа string) вида...

Как определить определенную часть URL
Здравствуйте! Каким образом можно определить определенную часть URL? К примеру есть URL...

как обновить определённую часть страницы
На странице есть ссылка на изменение параметра &lt;a href=&quot;?alb=25&quot; &gt;ссылка&lt;/a&gt;. Как сделать, чтобы...

Как вывести часть картинки (определенную область)
Подскажите как вывести часть картинке на экран. Допустим есть большая картинка с размерами...

Как достать с сайта определённую часть страницы
Допустим на сайте(php) есть 3 поля в которых выбирается Специальность , потом появляется выбор ...

Как вывести на форму определенную часть экрана?
Здравствуйте! Подскажите каким образом можно в реальном времени вывести на форму, то что...


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

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

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