Как получить все пиксели с картинки в массив?
class Player { // класс Игрока
public:
float x, y, w, h, dx, dy, speed = 0; //координаты игрока х и у, высота ширина, ускорение (по х и по у), сама скорость
int dir = 0; //направление (direction) движения игрока
String File; //файл с расширением
Image image;//сфмл изображение
Texture texture;//сфмл текстура
Sprite sprite;//сфмл спрайт
const int WW = 150;
const int HH = 150;
const int del = 6;
const int arr[9] = {1, 1, 1, 1, 9, 1, 1, 1, 1};
sf::Uint8 *pixels = new sf::Uint8[WW*HH*4]; // НЕ МОГУ СДЕЛАТЬ ЕГО КОНСТАНТОЙ, ПОТОМУ ЧТО НАДО ИЗМЕНЯТЬ ПОТОМ
//const sf::Uint8 *pixels1 = new sf::Uint8[WW*HH*4];
Player(String F, float X, float Y, float W, float H){ //Конструктор с параметрами(формальными) для класса Player. При создании объекта класса мы будем задавать имя файла, координату Х и У, ширину и высоту
File = F;//имя файла+расширение
w = W; h = H;//высота и ширина
image.loadFromFile("images/" + File);//запихиваем в image наше изображение вместо File мы передадим то, что пропишем при создании объекта. В нашем случае "hero.png" и получится запись идентичная image.loadFromFile("images/hero/png");
texture.loadFromImage(image);//закидываем наше изображение в текстуру
pixels = image.getPixelsPtr(); // getPixelsPrt() ВОЗВРАЩАЕТ const, так что это не работает
for(int i = 0; i < WW*HH*4; i += 1) {
pixels[i] = 0* (pixels[i - WW - 4] * arr[0] + pixels[i - WW] * arr[1] + pixels[i - WW + 4] * arr[2] + pixels[i - 4] * arr[3] + pixels[i] * arr[4] + pixels[i + 4] * arr[5] + pixels[i + WW - 4] * arr[6] + pixels[i + WW] * arr[7] + pixels[i + WW + 4] * arr[8]) / del;
i++;
pixels[i] = 0*(pixels[i - WW - 4] * arr[0] + pixels[i - WW] * arr[1] + pixels[i - WW + 4] * arr[2] + pixels[i - 4] * arr[3] + pixels[i] * arr[4] + pixels[i + 4] * arr[5] + pixels[i + WW - 4] * arr[6] + pixels[i + WW] * arr[7] + pixels[i + WW + 4] * arr[8]) / del;
i++;
pixels[i] = 0*(pixels[i - WW - 4] * arr[0] + pixels[i - WW] * arr[1] + pixels[i - WW + 4] * arr[2] + pixels[i - 4] * arr[3] + pixels[i] * arr[4] + pixels[i + 4] * arr[5] + pixels[i + WW - 4] * arr[6] + pixels[i + WW] * arr[7] + pixels[i + WW + 4] * arr[8]) / del;
i++;
//pixels[i] = 255;
}
texture.update(pixels);
//image.createMaskFromColor(Color(41, 33, 59));//убираем ненужный темно-синий цвет, эта тень мне показалась не красивой.
// texture.loadFromImage(image);//закидываем наше изображение в текстуру
sprite.setTexture(texture);//заливаем спрайт текстурой
x = X; y = Y;//координата появления спрайта
sprite.setTextureRect(IntRect(0, 0, WW, h));
}
....
Player p("hero.png",150,150,37.5, 37.5);//создаем объект p класса player,задаем "hero.png" как имя файла+расширение, далее координата Х,У, ширина, высота.
Сидел дня 2, ничего в голову не приходило, как только задал вопрос на stackoverflow, так сразу решение придумал, хоть и костыльное, магия)))
pixels1 = image.getPixelsPtr();
for(int i = 0; i < WW*HH*4; i += 1) {
pixels[i] = pixels1[i];
}
В конструкторе вашего класса сначала при помощи new[]
создается массив pixels
с размером 150 * 150 * 4
. После этого созданный массив вышвыривается в утечку памяти вызовом
pixels = image.getPixelsPtr();
После чего вы работаете с полученным из getPixelsPtr()
новым массивом как будто он имеет размер 150 * 150 * 4
. Кто вам сказал, что он имеет такой размер?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задача: Многоугольник (необязательно выпуклый) задан на плоскости перечислением координат вершин в порядке обхода его границыОпределить...
Неправильно записывает и читает из файлаЗаписывает age = 5и Name = "Масло", а выводит age=0 и Name = ""