Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2010, 12:40   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Ошибка в создании круглого градиента.

Создал процедуру круглого градиента (осветления) - имитация свечения Солнца. Но где-то допустил ошибку или что-то не учел. Градиент получается, но изображение портится: (см аттач).
Код такой:
Код:
Procedure GRH_AddToColorChannel(Incer : Byte; Var Chan:Byte);
Var
 I:Byte;
Begin
 For I:=1 to Incer do
  If Chan < 255 Then Inc(Chan);
End;

Function GRH_DrawSun(A:ImagePicture):ImagePicture;
Var
X,Y:SmallInt;
RC,GC,BC:Byte;
T:Byte;
Begin
 For Y:=0 to 119 do
  For X:=0 to 119 do
    If Sqr(120) > Sqr(X) + Sqr(Y) Then
     Begin
      RC := A[X,Y] And $FF;
      GC := (A[X,Y] Shr 8) And $FF;
      BC := (A[X,Y] Shr 16) And $FF;
      T:=Round(Sqrt(Sqr(X)+Sqr(Y)));
      GRH_AddToColorChannel(120 - T, RC);
      GRH_AddToColorChannel(120 - T, GC);
      GRH_AddToColorChannel(120 - T, BC);
      Result[X,Y] := (RC or GC shl 8) or BC shl 16;
     End;
End;
UPD ---------------------------------
Полностью закомментировал всю функцию, оставил только заголовок и пустой Begin\End. По прежнему появляются артефакты. Закоментировал сам вызов функции - Оно перерисовывается без артефактов. Видимо дело в том, что массив 0..249,0..349 типа Integer нельзя передавать как параметр функции?
UPD v2 ------------------------------
Поменял Function на Procedure в том же модуле записал глобальную переменную, общаюсь с ней, вроде артефакты прошли. Это точно было из-за передачи большого объема инфы.
Изображения
Тип файла: jpg Без имени.jpg (13.4 Кб, 70 просмотров)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 03.01.2010 в 14:37.
Alex Cones вне форума Ответить с цитированием
Старый 03.01.2010, 16:20   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

ImagePicture - это объект?
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 03.01.2010, 16:21   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
Type
   ImagePicture = Array[0..249,0..329] Of Integer;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.01.2010, 16:28   #4
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Так мне кажется лучше будет
Код:
procedure GRH_DrawSun(var A:ImagePicture);
А еще лучше сделать класс-обертку над ImagePicture и работать непосредственно с классом.
А такие объемы в стеке хранить - преступление

В правой части очень похоже на выход за границы или на то что процедура при выходе чистила стек.
Сказал и загрустил от бесспорности своей правоты.

Последний раз редактировалось 0nni; 03.01.2010 в 16:30.
0nni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Страшная ошибка при создании процесса nazavrik Общие вопросы C/C++ 3 03.10.2009 01:17
ошибка при создании TImage Juffin Общие вопросы Delphi 9 22.04.2009 17:49
Ошибка при создании таблицы LAGOX SQL, базы данных 1 28.03.2009 00:46
Ошибка при создании типа Monte-Kristo Помощь студентам 4 04.03.2009 19:51
ошибка в создании класса juden Общие вопросы C/C++ 2 17.05.2008 15:04