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

Градиентная заливка изображения

18.06.2015, 22:32. Показов 2950. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста, не могу составить алгоритм, чтобы изображение любого размера заливалось градиентом. Вот есть алгоритм, но этот алгоритм делает изображение только 128х128. Если же поменять значения, например 1280х1280, то получается что-попало. Подскажите, что нужно изменить в этом алгоритме.
Matlab M
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
for i=1: 1: 128;
    for j=1: 1: 128;
    C(i,j)=255;
    end;
end;
k=129;
l=0;
p=255;
for z=1: 1: 128;
    p=p-1;
    k=z+1;
for i=1: 1: z;
k=k-1;
 
C(i,k)=p;
end;
end;
p=0;
for z=128: -1: 1;
    p=p+1;
    k=z-1;
for i=128: -1: z;
k=k+1;
 
C(i,k)=p;
end;
end;
C=C./255;
imshow(C);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2015, 22:32
Ответы с готовыми решениями:

Выделение и заливка фрагмента изображения
Здравствуйте! Есть цветное RGB изображение. Как можно на нем выделить нужный мне фрагмент размером...

Градиентная заливка
Помогите , пожалуйста! Мне нужна следующая программа: на форме расположены два текстбокса, в...

Градиентная заливка
Здравствуйте. Столкнулся с такой проблемой: есть набор точек (x, y, цвет) на плоскости, причём...

Градиентная заливка
Для градиентной заливки использую два цвета создал фунцию улучшил немного пример брал с delphi ...

5
177 / 143 / 50
Регистрация: 07.02.2014
Сообщений: 489
19.06.2015, 07:36 2
aalleexxc, что-то в этом духе:
Matlab M
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
for i = 1:length(img)
    for j = 1:length(img)
        C(i,j)=255;
    end
end
 
k = 129; %если этот параметр зависит от размера, то нужно записать k = length(img)+1
l = 0;
p = 255;
 
for z=1:length(img)
    p = p-1;
    k = z+1;
    for i = 1:z
        k = k-1;
        C(i,k) = p;
    end
end
 
p=0;
 
for z = length(img):-1:1;
    p = p+1;
    k = z-1;
    for i = length(img):-1:z
        k=k+1;
        C(i,k)=p;
    end
end
 
C = C./255;
imshow(C);
0
0 / 0 / 0
Регистрация: 18.06.2015
Сообщений: 5
19.06.2015, 08:30  [ТС] 3
Norwall, Спасибо, но смотрите что получается.
Matlab M
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
Y(128,128)=0
for i = 1:length(Y)
    for j = 1:length(Y)
        C(i,j)=255;
    end
end
 
k = length(Y)+1; 
l = 0;
p = 255;
 
for z=1:length(Y)
    p = p-1;
    k = z+1;
    for i = 1:z
        k = k-1;
        C(i,k) = p;
    end
end
 
p=0;
 
for z = length(Y):-1:1;
    p = p+1;
    k = z-1;
    for i = length(Y):-1:z
        k=k+1;
        C(i,k)=p;
    end
end
 
C = C./255;
figure(3)
imshow(C);
Когда Y(128,128)=0, то все работает идеально, получается вот такое изображение(что нам и требуется):http://img-host.su/J2qM.jpg

Если поменять Y(1280,1280)=0, то получается вот так: http://img-host.su/1TGK.jpg

Т.е. как я понимаю, не хватает цветов для заполнения всех ячеек и нужно как то связать кол-во цветов и размер изображения. А как это сделать - не пойму =(
0
177 / 143 / 50
Регистрация: 07.02.2014
Сообщений: 489
19.06.2015, 13:41 4
Лучший ответ Сообщение было отмечено aalleexxc как решение

Решение

aalleexxc, вот как получилось:
Matlab M
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
clc, clear all, close all
 
img = zeros(1280,1280);
 
for i = 1:length(img)
    for j = 1:length(img)
        C(i,j) = 2550;
    end
end
 
p = 2550;
 
for z=1:length(img)
    p = p-1;
    k = z+1;
    for i = 1:z
        k = k-1;
        C(i,k) = p;
    end
end
 
p=0;
 
for z = length(img):-1:1;
    p = p+1;
    k = z-1;
    for i = length(img):-1:z
        k=k+1;
        C(i,k)=p;
    end
end
 
C = C./2550;
imshow(C);
Градиентная заливка изображения
1
0 / 0 / 0
Регистрация: 18.06.2015
Сообщений: 5
22.06.2015, 17:12  [ТС] 5
Norwall, спасибо большое, получилось!!! Делал почти так же, почему то не получалось - значит где то, что - то не заметил.... Спасибо!
0
0 / 0 / 0
Регистрация: 18.06.2015
Сообщений: 5
24.06.2015, 09:35  [ТС] 6
Вот рабочий алгоритм градиентной заливки, который заливает изображение абсолютно любого размера изображения(За помощь большое спасибо Norwall).
Matlab M
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
img = zeros(500,500);
for i = 1:length(img)
    for j = 1:length(img)
        C(i,j) = length(img)*2;
    end
end
 
p = length(img)*2;
 
for z=1:length(img)
    p = p-1;
    k = z+1;
    for i = 1:z
        k = k-1;
        C(i,k) = p;
    end
end
 
p=0;
 
for z = length(img):-1:1;
    p = p+1;
    k = z-1;
    for i = length(img):-1:z
        k=k+1;
        C(i,k)=p;
    end
end
 figure(3)
C = C./((length(img)*2));
imshow(C);
0
24.06.2015, 09:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2015, 09:35
Помогаю со студенческими работами здесь

Градиентная заливка в paintEvent()
Добрый день, нужно нарисовать в окне прямоугольник закрашенный градиентной заливкой, но...

Градиентная заливка + поворот
Здравствуйте, форумчане. Прошу у вас помощи с таким заданием - Необходимо квадрат (пользователь...

Градиентная заливка формы
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Data;...

Градиентная заливка диаграммы Excel
Всем доброго времени суток! В общем, необходимо отправить массив данных в Excel с построением...


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

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

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