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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 11:29   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию List out of bounds (0)

Есть код:
Код:
Procedure Packing(Bit:TBitMap; Path:String);
 Var
  CC,FC:TColor;
  X,Y,N:Integer;
  List:TStringList;
  SR,SG,SB,SColor:String;
 Begin
  List:=TStringList.Create;
  N:=0;
  CC:=Bit.Canvas.Pixels[0,0];
  For Y:=0 to 99 do
   Begin
    For X:=0 to 149 do
     Begin
      FC:=Bit.Canvas.Pixels[X,Y];
      If FC = CC Then
       Begin
        Inc(N);
       End
      Else
       Begin
        SColor:=IntToHex(CC,6);
        SR:=Copy(SColor,5,2);
        SG:=Copy(SColor,3,2);
        SB:=Copy(SColor,1,2);
        List.Strings[Y]:=List.Strings[Y]+
         Chr(N+32)+                   {N - количество}
         Chr(Round(StrToInt('$'+SB)/4+32))+  {B - канал}
         Chr(Round(StrToInt('$'+SG)/4+32))+  {G - канал}
         Chr(Round(StrToInt('$'+SR)/4+32));  {R - канал}
         N:=1;
         CC:=FC;
       End;
     End;
   End;
  List.SaveToFile(Path);
  List.Free;
 End;
При запуске и посылке процедуре параметров вылезает List out of bounds (0) . Пробовал изменять строку
Код:
  For Y:=0 to 99 do
на
Код:
  For Y:=1 to 100 do
Тогда появляется List out of bounds (100).
Что делать?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 27.08.2009, 11:41   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Как я понимаю из логики вашего кода, вам надо было написать вместо этого
Код:
List.Strings[Y]:=List.Strings[Y]+
         Chr(N+32)+                   {N - количество}
         Chr(Round(StrToInt('$'+SB)/4+32))+  {B - канал}
         Chr(Round(StrToInt('$'+SG)/4+32))+  {G - канал}
         Chr(Round(StrToInt('$'+SR)/4+32));  {R - канал}
это
Код:
List.Add(
         Chr(N+32)+                   {N - количество}
         Chr(Round(StrToInt('$'+SB)/4+32))+  {B - канал}
         Chr(Round(StrToInt('$'+SG)/4+32))+  {G - канал}
         Chr(Round(StrToInt('$'+SR)/4+32)));  {R - канал}
Edit:
В таком случае что-то вроде этого:
Код:
var
List: String;
f: TextFile;
....
begin
....
for ....
begin
  List := List + 
         Chr(N+32)+ {N - количество}
         Chr(Round(StrToInt('$'+SB)/4+32))+  {B - канал}
         Chr(Round(StrToInt('$'+SG)/4+32))+  {G - канал}
         Chr(Round(StrToInt('$'+SR)/4+32));  {R - канал}
...
end;
{$I-}
AssignFile(f, Path);
ReWrite(f);
Write(f, s);
CloseFile(f);
{$I+}
и пожалуйста, в следующий раз опишите условия ваши, а то вопрос ведь звучал вовсе не так ?!

Последний раз редактировалось BOBAH13; 27.08.2009 в 11:54.
BOBAH13 вне форума
Старый 27.08.2009, 11:43   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
List.Add(
Chr(N+32)+ {N - количество}
Chr(Round(StrToInt('$'+SB)/4+32))+ {B - канал}
Chr(Round(StrToInt('$'+SG)/4+32))+ {G - канал}
Chr(Round(StrToInt('$'+SR)/4+32))); {R - канал}
Не подойдет, так как мне нужно добавлять это к строке.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 27.08.2009, 11:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Надо же до размеров Битмапа цикл гнать:
Код:
 For Y:=0 to  do Bit.width...
I'm learning to live...
Stilet вне форума
Старый 27.08.2009, 11:58   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Битмап как раз 150*100.
Цитата:
{$I-}
AssignFile(f, Path);
ReWrite(f);
Write(f, s);
CloseFile(f);
{$I+}
Уберу Стринглисты,сделаю это.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 27.08.2009, 12:04   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ТОгда дайствительно это:
Цитата:
List.Strings[Y]:=List.Strings[Y]+
ты здря. Лучче уж так:
Код:
 if List.count>y then List.Strings[Y]:=List.Strings[Y]+
I'm learning to live...
Stilet вне форума
Старый 27.08.2009, 12:07   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
ТОгда дайствительно это:
ты здря. Лучче уж так:
Код:
 if List.count>y then List.Strings[Y]:=List.Strings[Y]+
Ну в первом правильно, лучше не свои числа вбивать а сделать как было сказано
Код:
for y:= 0 to Bit.Height - 1 do
for x:= 0 to Bit.Width - 1 do
To Stilet:
Это условие никогда не будт тру список создается пустой, соотвественно всегда Если 0 больше числа которое само 0 и выше , т.к. не вижу места в коде где List.Add или List.Insert

Edit:
to Stilet:
1. Причем тут List ?
Цитата:
if List.count>y then List.Strings[Y]:=List.Strings[Y]+
Может я чего-то не пойму, ну тут вроде условие с List ?!
2. Не понял??? Bit же не создается в этой функе. ? Посмотрите параметры/аргументы процедуры
Цитата:
Procedure Packing(Bit:TBitMap; Path:String);

Последний раз редактировалось BOBAH13; 27.08.2009 в 12:16.
BOBAH13 вне форума
Старый 27.08.2009, 12:09   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это условие никогда не будт тру
Не понял??? Bit же не создается в этой функе.
Причем тут List? Я не о нем говорю.
I'm learning to live...
Stilet вне форума
Старый 27.08.2009, 12:18   #9
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
for y:= 0 to Bit.Height - 1 do
for x:= 0 to Bit.Width - 1 do
Не пашет, та же самая ошибка, буду записывать построчно, через AssignFile
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 27.08.2009, 12:22   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
Procedure Packing(Bit:TBitMap; Path:String);
 Var
  CC,FC:TColor;
  X,Y,N:Integer;
  List:TStringList;
  SR,SG,SB,SColor:String;
 Begin
  List:=TStringList.Create;
  N:=0;
  CC:=Bit.Canvas.Pixels[0,0];
  For Y:=0 to bit.height do
   Begin 
List.add(''); // Обрати вниманеи сюда
    For X:=0 to bit.width do
     Begin
      FC:=Bit.Canvas.Pixels[X,Y];
      If FC = CC Then
       Begin
        Inc(N);
       End
      Else
       Begin
        SColor:=IntToHex(CC,6);
        SR:=Copy(SColor,5,2);
        SG:=Copy(SColor,3,2);
        SB:=Copy(SColor,1,2);
        List.[list.count-1]:=List.[list.count-1]+ // И сюда
         Chr(N+32)+                   {N - количество}
         Chr(Round(StrToInt('$'+SB)/4+32))+  {B - канал}
         Chr(Round(StrToInt('$'+SG)/4+32))+  {G - канал}
         Chr(Round(StrToInt('$'+SR)/4+32));  {R - канал}
         N:=1;
         CC:=FC;
       End;
     End;
   End;
  List.SaveToFile(Path);
  List.Free;
 End;
Увидел ошибку?
I'm learning to live...
Stilet вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обход ошибки List index out of bounds (0) Яр|/||< (^_^) Общие вопросы Delphi 3 29.06.2009 12:45
Табулирование функции. Ошибка 'List index out of bounds(0)' Мэр Общие вопросы Delphi 2 03.06.2009 09:11
Ошибка List index out of bounds(0) при использовании запроса AdoQuery ArtInt БД в Delphi 14 15.04.2009 18:35
При запуске ComboBoxEx пишет List index out of bounds -1. dx+ Общие вопросы Delphi 6 12.06.2008 22:32