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

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

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

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

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

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

То есть нельзя добавлять что-либо к несуществующей строке???
С-П-А-С-И-Б-О!!!! Работает))
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

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

Цитата:
То есть нельзя добавлять что-либо к несуществующей строке???
Естесственно!!!
Ты же не можешь сьесть арбуз которого у тя нет?
Ну разве что мысленно
I'm learning to live...
Stilet вне форума
Старый 27.08.2009, 12:27   #13
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Не пашет, та же самая ошибка, буду записывать построчно, через AssignFile
Видимо это будет продолжать еще очень долго

Код:
function Packing(Bit: TBitmap; Path: String): Boolean;
var
  f: TextFile;
  y, x, n: Integer;
  fc, cc: TColor;
  s, sr, sg, sb: String;
begin
  Result := False;
  if (Bit.Width = 0) or (Bit.Height = 0) then
    Exit;

  {$I-}
  AssignFile(f, Path);
  ReWrite(f);

  n := 0;
  cc := Bit.Canvas.Pixels[0, 0];

  for y := 0 to Bit.Height - 1 do
  begin
    for x := 0 to Bit.Width - 1 do
    begin
      fc := Bit.Canvas.Pixels[x, y];

      if (fc = cc) then
      begin
        inc(n);
      end else
      begin
        s := IntToHex(cc, 6);
        sr := Copy(s, 5, 2);
        sg := Copy(s, 3, 2);
        sb := Copy(s, 1, 2);
        Write(f,
          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;

  CloseFile(f);
  {$I+}

  Result := True;
end;
BOBAH13 вне форума
Старый 27.08.2009, 21:29   #14
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Немного изменил код,
Код:
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:=1;
  CC:=Bit.Canvas.Pixels[0,0];
  For Y:=0 to Bit.Height-1 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.Strings[list.count-1]:=List.Strings[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;
    CC:=Bit.Canvas.Pixels[0,Y];
   End;
  List.SaveToFile(Path);
  List.Free;
 End;
Все прекрасно и замечательно работает, так, как надо. Но во все файлы в конце записывается лишний #13. Где-то на форуме я читал, что так всегда, когда записывается в файл Стринглист. Но теперь даже не знаю на какое слово пропечатать поиск. Может подскажете, как убрать его?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 27.08.2009, 22:47   #15
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Флуд А чем решение в посте #13 не устраивает ?

p.s.
Цитата:
Все прекрасно и замечательно работает
а вот это уж я даже удивлен т.к.
Код:
For X:=0 to Bit.Width do

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

Цитата:
а вот это уж я даже удивлен т.к.
Почему еси не секрет?
I'm learning to live...
Stilet вне форума
Старый 28.08.2009, 09:16   #17
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
А чем решение в посте #13 не устраивает
У меня 79 файлов, в каждом - по 100 строк. TStringList делает это за 4 секунды (все) а построчно около 2-х минут. Разница есть. Попробовал на пустом файле - все равно записывается лишний #13 в конце. Я могу не обращать на него внимания, но тогда придется ставить ограничение на количество строк, к тому же он мешает вести мне точный подсчет.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 28.08.2009, 09:25   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
к тому же он мешает вести мне точный подсчет.
Что мешает удалять последнюю строку если она пуста?
Код:
if list[list.count-1]='' then list.delete(list.count-1);
I'm learning to live...
Stilet вне форума
Старый 28.08.2009, 09:33   #19
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
If List.Strings[List.Count-1] = '' Then
   Begin
    Windows.Beep(600,600);
    List.Delete(List.Count-1);
   End;
Она даже ни разу не просигналила. Думаю здесь имеет место не содержание, а то, что по-другому она не записывает. Ведь пустой стринглист тоже записывает один #13. Наверное придется потом проходиться по всем файлам и удалять последнюю строку (#13).
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 28.08.2009, 09:39   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Думаю здесь имеет место не содержание, а то, что по-другому она не записывает
Ошибаешся. Именно содержимое. Просто нужно посмотреть как ты туда пихаешь и пошагово пройтись.
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