в общем создал функцию которая создаёт массив
GLfloat Rainbow_color(bool a, int b) // радужный покрас
{
if (b == 0)
return 0;
GLfloat color[b]; // массивы нач с одного а пересчёт с нуля
if(a == false)
{
// вводим одноцветно
int i_t =0;
for (int i =0; i < b; i++)
{
if(i_t == 0)
{
color[i] = 0.8f;
i_t = 1;
}
else if(i_t == 1)
{
color[i] = 0.21f;
i_t = 2;
}
else if(i_t == 2)
{
color[i] = 0.14f;
i_t = 0;
}
}
return color[b];
}
else
{
return color_prohod(b);
}
}
GLfloat color_prohod(int b)
{
GLfloat ranbow_color[b]; // разноцветный текст
int t1 = b/60; int t2 = b%60; int t3 = t2/10; int t4 = t2%10; // перемен размера перемен остатка перремен остатка разм и размер от размера
int prohod = (t1*6)+t3;
....
return ranbow_color[b];
}
попробовал его использовать в вызове отрисовки и для это решил положить в массив
GLfloat cwet_chikl[360];
// попытка номер один
cwet_chikl[360] = Rainbow_color(true, 360); // не сработало
// попытка номер два
cwet_chikl[360] = *Rainbow_color(true, 360); // ошибка
// попытка номер три
cwet_chikl[360] = &Rainbow_color(true, 360); // ошибка
// попытка номер четыре
std::memcpy(cwet_chikl[360], Rainbow_color(true,360), sizeof(GLfloat)*360); // пишет ошибка: cannot initialize a parameter of type 'void *' with an lvalue of type 'GLfloat' (aka 'float')
// ещё вариант
std::memcpy(cwet_chikl, &Rainbow_color(true,360), sizeof(GLfloat)*360); // ошибка: cannot take the address of an rvalue of type 'GLfloat' (aka 'float')
В общем не сработало :( Помогите !!!!
В общем починил, через ссылку, работает :P
Место объявления функции
void color_prohod1(GLfloat *cwet_chikl, int b);
Место вызова функции
GLfloat cwet_chikl[360];
color_prohod1(cwet_chikl, 360);
Сама функция. Назначение функции окраска "отрисовывательной" линии в радужный диапазон цветов.
void color_prohod1(GLfloat *cwet_chikl, int b)
{
int t1 = b/30; int t2 = b%30;
int prohod = t1/7;
qDebug() << "t1 = b/30: " << t1;
qDebug() << "t2 = b%30: " << t2;
qDebug() << "prohod = t1/7: " << prohod;
int s =0; // элемент "позиция " массива прим: ranbow_color[124]; s ==124;
int i = 0;
int i_t1 = 0;
for (int a_g =0; a_g < prohod+1; a_g++) {
qDebug() << "2444!!!!!!!!!!!!!!!a_g:" << a_g;
if (i == 0) {
i = 1;
GLfloat per = 0.0;
for (int a = 0; a < 10 ; a++) {
for (int a_i = 0; a_i < 3; a_i++) {
if(a_i == 0) {
per += 0.1f;
cwet_chikl[s] = per;
s++;
}
if(a_i == 1) {
cwet_chikl[s] = 0.0f;
s++;
}
if(a_i == 2) {
cwet_chikl[s] = 0.0f;
s++;
}
}
}
qDebug() << "tyt i:" << i << " cwet_chikl[" << s << "]" << cwet_chikl[s];
i_t1 = i_t1 +1;
if(t1 <= i_t1) continue;
}
if(i == 1){
i = 2;
GLfloat per = 0.0;
for (int a = 0; a < 10 ; a++) {
for (int a_i = 0; a_i < 3; a_i++) {
if(a_i == 0) {
cwet_chikl[s] = 0.0f;
s++;
}
if(a_i == 1) {
per += 0.1f;
cwet_chikl[s] = per;
s++;
}
if(a_i == 2) {
cwet_chikl[s] = 0.0f;
s++;
}
}
}
qDebug() << "tyt i:" << i << " cwet_chikl[" << s << "]" << cwet_chikl[s];
i_t1 = i_t1 +1;
if(t1 <= i_t1) continue;
}
...
if (i == 6) {
i = 0;
GLfloat per = 0.0;
for (int a = 0; a < 10 ; a++){
for (int a_i = 0; a_i < 3; a_i++){
if(a_i == 0){
per += 0.1f;
cwet_chikl[s] = per;
s++;
}
if(a_i == 1){
cwet_chikl[s] = 0.0f;
s++;
}
if(a_i == 2){
cwet_chikl[s] = 0.0f;
s++;
}
}
}
qDebug() << "tyt i:" << i << " cwet_chikl[" << s << "]" << cwet_chikl[s];
i_t1 = i_t1 +1;
if(t1 <= i_t1) continue;
}
}
// выводим одноцветно
int i_t =0;
for(int i1 = 0;i1 < t2;i1++)
{
if(i_t == 0)
{
cwet_chikl[s] = 0.8f;
s++;
i_t = 1;
}
else if(i_t == 1)
{
cwet_chikl[s] = 0.21f;
s++;
i_t = 2;
}
else if(i_t == 2)
{
cwet_chikl[s] = 0.14f;
s++;
i_t = 0;
}
}
}
Простейший пример работы с указателями
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void addOne(float *buf, int N);
int main()
{
float A[5] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
float *B[5];
// заполним массивы
printf("vvod A \n");
addOne(&A, 5); // по адресу
printf(" vvod B \n");
addOne(B, 5); // по указателю
printf("game ower");
system("pause>null");
return 0;
}
void addOne(float *Buf, int N)
{
// memset(Buf, 0, sizeof(Buf));
for (int n = 0; n< N; n++)
{
Buf[n] = Buf[n] + 1.0f;
printf("%f, \n", Buf[n]);
}
printf("\n");
}
Заметил что вопрос пересекается с стандартным простецким вопросом как положить массив в массив . в общем я пользуюсь двумя методами. Первый : тупо перебором
float S[5] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
float C[5] = {0.0f, 0.0f, 0.0f,0.0f, 0.0f};
for (int i = 0; i < 5; i++){
C[i] = S[i];
printf("%f, \n", S[i]);
}
второй (чаще) : функцией memcpy
float S[5] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
float C[5] = {0.0f, 0.0f, 0.0f,0.0f, 0.0f};
memcpy (C, S, sizeof(float)*5);
Необходимо получить класс Mat, провести с ним манипуляции и сохранить в byte[], с последующим восстановлением byte[] в MatНаписал простейший пример:
Начал получить ошибку на Mac при попытке записать pdf файл в папку tempВернее, приложение должно записывать туда файл, но не записывает (исключения...