На главную Наши проекты:
Журнал   ·   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_
  
> Как исправить пустой bit-файл при сохранении?
    Пытаюсь загрузить jpeg и сохранить только часть этого изображения в формат bmp. В итоге получаю пустой bit-файл. Как исправить?

    ExpandedWrap disabled
      uses ...jpeg;
       
      procedure TForm1.FormPaint(Sender: TObject);
      var
        bmp: TBitmap;
        bit: TBitmap;
        JPEG: TJPEGImage;
        q,w:TRect;
      begin
      bmp:=tbitmap.Create;
      bit:=tbitmap.Create;
      JPEG := TJPEGImage.Create;
      JPEG.LoadFromFile('cant.jpg');
      Bmp.Assign(JPEG);
      q := Rect(225, 543, 352, 582);
      w := Rect(0, 0, 352-255, 582-543);
      bit.Width:=352-255;
      bit.Height:=582-543;  
      bit.Canvas.CopyRect(w, bmp.Canvas, q);
      bit.savetofile('cant.bmp');
      JPEG.free;
      bmp.Free;
      bit.Free;
      end;
      1) Зачем эти действия в обработчике рисования на форме. Эти действия стоит делать в обработчике клика по кнопке, а не при рисовании.
      2) Для проверки успешности загрузки попробуйте сохранить bmp в файл
      3) Убедитесь, что область Rect(225, 543, 352, 582) полностью в пределах изображения. Какие у него размеры?
      4) Для проверки можно не сохранять файл на диск, а рисовать его на форме.

      На первый взгляд код должен работать нормально.
        Исправила проблему, надо было просто изменить координаты у Rect, а также Width и Height. Как через цикл разрезать картинку полностью и добавить фрагменты на холст?

        Удалось только добавить один кадр, а мне нужно все, через один цикл. Я уже перепробовала изменять параметры Rect, не получается сдвинуть картинку и отобразить следующий кадр.

        ExpandedWrap disabled
          procedure TForm1.Button1Click(Sender: TObject);
          var
            bmp: TBitmap;
            bit: TBitmap;
            JPEG: TJPEGImage;
            q,w:TRect;
            i,x,y: integer;
          begin
          bmp:=tbitmap.Create;
          bit:=tbitmap.Create;
          JPEG := TJPEGImage.Create;
          JPEG.LoadFromFile('cant.jpg');
          Bmp.Assign(JPEG);
          //q := Rect(225, 543, 352, 582);
          //w := Rect(0, 0, 352-255, 582-543);
          //bit.Width:=352-255;
          //bit.Height:=582-543;
          for i:=0 to 15 do
          begin
          // mod 4
             x:=i mod 4;
             y := (i div 4);
            
             q := Rect(0,0, 150, 150);
             w := Rect(0,0, 150, 150);
             bit.Width:=150;
             bit.Height:=150;
             bit.Canvas.CopyRect(w, bmp.Canvas, q);
             Canvas.Draw(150*x,150*y,bit);
            
          end;
          //bit.savetofile('cant.bmp');
          JPEG.free;
          bmp.Free;
          bit.Free;
           
          end;
          ExpandedWrap disabled
            w := Rect(0, 0, 150, 150);
            for i:=0 to 15 do
            begin
               x := 150 * (i mod 4);
               y := 150 * (i div 4);
               q := Rect(x, y, x + 150, y + 150);
               Canvas.CopyRect(w, bmp.Canvas, q);
               Sleep(1000);
            end;
          Или так
          ExpandedWrap disabled
            with Canvas do
            begin
              Pen.Color := clYellow;
              Pen.Width := 3;
              for i:=0 to 15 do
              begin
                 x := i mod 4;
                 y := i div 4;
                 w := Rect(160 * x, 160 * y, 160 * x + 150, 160 * y + 150);
                 Rectangle(w); // Обвел дополнительно каждый кадр желтой рамкой.
                 CopyRect(w, bmp.Canvas, Rect(150 * x, 150 * y, 150 * x + 150, 150 * y + 150));
                 Sleep(1000);
              end;
              Pen.Width := 1;
            end;
          Сообщение отредактировано: macomics -
            to macomics
            перед Pen.Color и Pen.Width "Canvas." пропустил. :scratch:, видимо в спешке.
            Сообщение отредактировано: RusSun -
              Точно. Спасибо. Исправил.
              Сообщение отредактировано: macomics -
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0374 ]   [ 16 queries used ]   [ Generated: 11.12.24, 03:36 GMT ]