На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Как создать рисунок по данным из текстового файла?
    В текстовом файле записано цифры. Каждая цифра с новой строки. Цифры означают RGB. У меня холст 100 на 100 пикселей, 10000 пикселей, умножаем на 3 (RGB). Получается 30000 цифр RGB. Столько значений у меня хранятся в текстовом файле в столбик. Ориентируясь по этим данным нужно нарисовать картинку на компоненте Image. Т.е. берем первые три строки в текстовом файле рисуем пиксель, следующие три строки рисуем пиксель по соседству в линии(горизонтали), пока полностью не нарисуем линию и переходим к следующей линий и так пока картинка не будет готова. Загрузку файлов я уже сделала и записала в массив.
    Пример кода и исходники где есть текстовый файл. Прикреплённый файлПрикреплённый файлEx2.zip (39,67 Кбайт, скачиваний: 4)
    ExpandedWrap disabled
      unit Unit1;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, StdCtrls, ExtCtrls;
       
      type
        TDynamicArrayOfIntegers = array of Integer;
        TForm1 = class(TForm)
          Memo1: TMemo;
          Image1: TImage;
          Memo2: TMemo;
          procedure FormShow(Sender: TObject);
        private
          { Private declarations }
        public
          { Public declarations }
        end;
       
      var
        Form1: TForm1;
       
      implementation
       
      {$R *.dfm}
       
      function LoadFromFile(const fname: String; lines: TStrings): TDynamicArrayOfIntegers;
      var
        I: Integer;
        FileDir:String;
      begin
        FileDir:=fname;
        if FileExists(FileDir) then begin
          lines.LoadFromFile(FileDir);
          SetLength(Result, lines.Count);
          for i := 0 to lines.Count - 1 do
            Result[i] := StrToIntDef(lines[i], 0);
        end else Result := nil;
      end;
       
      procedure TForm1.FormShow(Sender: TObject);
      var str:TDynamicArrayOfIntegers; y:Integer;
      begin
        str:=LoadFromFile('data11.txt', Memo1.Lines);
       
        for y := 0 to High(str) do begin
            Memo2.Lines.Add(IntToStr(y mod 3));
        end;
      end;
       
      end.
      У тебя там нормальная картинка или какой-то рандомный набор пикселей?
      А то вот так выглядит:

      user posted image
      Прикреплённый файлПрикреплённый файл001770.png (26,22 Кбайт, скачиваний: 23)
        Цитата
        У тебя там нормальная картинка или какой-то рандомный набор пикселей?
        А то вот так выглядит:

        Все правильно, так и должно быть. Там просто случайные пиксели которые нужно нарисовать.
          Цитата Katerina1993 @
          Все правильно, так и должно быть. Там просто случайные пиксели которые нужно нарисовать.

          Ну предупреждать жэж надо! Пришлось потерять время на проверку.
          Пример писал на Лазарусе. Скопипастишь там себе нужные куски.
          ExpandedWrap disabled
            unit uData;
             
            {$mode ObjFPC}{$H+}
             
            interface
             
            uses
              Classes, SysUtils, Graphics;
             
            type
             
              { TRGBTextLoader }
             
              TRGBTextLoader = class(TStringList)
              private
                LBitmap: TBitmap;
              private
                procedure DrawPicture;
              public
                constructor Create(ABitmap: TBitmap); reintroduce;
                procedure LoadFromFile(const FileName: string); override;
              end;
             
            implementation
             
            uses LclType;
             
            { TRGBTextLoader }
             
            procedure TRGBTextLoader.DrawPicture;
            var
              pbgr:     PRGBTriple;
              idx:      int32 = 0;
              row, col: int32;
            begin
              if Self.Count mod 3 <> 0
                then raise Exception.CreateFmt('Количество исходных строк (%d) некратно 3.', [Self.Count]);
             
              // вывод точек по ширине, пока не закончится высота
              LBitmap.Clear();
             
              for row:= 0 to LBitmap.Height - 1 do
                begin
                  if idx >= Self.Count
                    then break;
             
                  pbgr:= LBitmap.ScanLine[row];
             
                  for col:= 0 to LBitmap.Width - 1 do
                    begin
                      if idx >= Self.Count
                        then break;
             
                      pbgr^.rgbtRed:=   NativeInt(Self.Objects[idx + 0]) and $FF;
                      pbgr^.rgbtGreen:= NativeInt(Self.Objects[idx + 1]) and $FF;
                      pbgr^.rgbtBlue:=  NativeInt(Self.Objects[idx + 2]) and $FF;
                      inc(pbgr);
                      inc(idx, 3);
                    end;
                end;
            end;
             
            constructor TRGBTextLoader.Create(ABitmap: TBitmap);
            begin
              assert(assigned(ABitmap));
              inherited Create();
              LBitmap:= ABitmap;
            end;
             
            procedure TRGBTextLoader.LoadFromFile(const FileName: string);
            var
              idx, b: int32;
            begin
              inherited LoadFromFile(FileName);
             
              for idx:= 0 to Self.Count - 1 do
                begin
                  if not TryStrToInt(Self[idx], b) or not (b in [0..255])
                    then raise Exception.CreateFmt('Ошибка преобразования, строка %d.', [idx]);
             
                  Objects[idx]:= TObject(NativeInt(b));
                end;
             
              Self.DrawPicture();
            end;
             
            end.


          ExpandedWrap disabled
            procedure TFormMain.FormCreate(Sender: TObject);
            var
              loader: TRGBTextLoader;
              bmp: TBitmap;
            begin
              bmp:= TBitmap.Create();
              try
                bmp.PixelFormat:= pf24bit;
                bmp.SetSize(Image.Width, Image.Height);
             
                loader:= TRGBTextLoader.Create(bmp);
                try
                  try
                    loader.LoadFromFile('data11.txt');
                  except on e: Exception do
                    Application.MessageBox('Ошибка', PChar(e.Message), MB_ICONSTOP or MB_OK);
                  end;
                finally
                  loader.Free();
                end;
             
                Image.Picture.Assign(bmp);
              finally
                bmp.Free();
              end;
            end;

          Прикреплённый файлПрикреплённый файл445030.7z (65,07 Кбайт, скачиваний: 12)
            Verevkin, а можно вызывать Self.DrawPicture; не внутри процедуры LoadFromFile, а отдельно например
            Создается объект
            ExpandedWrap disabled
              loader:= TRGBTextLoader.Create(Image1.Picture,bmp,Memo1,0);


            а дальше вызывается.
            ExpandedWrap disabled
              loader.DrawPicture;

            Попробовала так сделать не получается.
            Свойство Objects[idx]:= TObject(NativeInt(b));, удается передать только когда DrawPicture вызывается внутри LoadFromFile.
            Мне нужно сделать процедуру внешней, чтобы загрузить текстовый файл один раз, а потом отдельно использовать процедуры для раскрашивания холста.
              Цитата Katerina1993 @
              а можно вызывать Self.DrawPicture; не внутри процедуры LoadFromFile, а отдельно например

              Мне всё равно. Я ж тебе исходник отдал, делай с ним чо хочешь.
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0308 ]   [ 21 queries used ]   [ Generated: 23.06.24, 15:07 GMT ]