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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2018, 10:52   #1
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Вопрос разрезать JPEG на 12 равных частей

может ли кто-то помочь с кодом? знаю что это делается как-то через CopyRect, но как именно равные части получить не соображу

Последний раз редактировалось garuna; 20.11.2018 в 10:56.
garuna вне форума Ответить с цитированием
Старый 20.11.2018, 10:56   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Загружай в Bitmap и Canvas.CopyRect. BitBlt еще есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.11.2018, 11:54   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Набросал пример. Комментариев нет, но, надеюсь, разберетесь:

Код:
uses
  JPEG;

type
  TBitMaps = array of TBitMap;

procedure BitMapsFree(var BitMaps: TBitMaps);
var
  i: Integer;
begin
  for i := 0 to High(BitMaps) do begin
    BitMaps[i].Free;
  end;
  SetLength(BitMaps, 0);
end;

function JPEGSlices(const FileName: string; Rows, Cols: Integer): TBitMaps;
var
  jpg: TJPEGImage;
  bmp: TBitMap;
  Width, Height: Integer;
  i, j, idx, x, y: Integer;
begin
  jpg := TJPEGImage.Create;
  jpg.LoadFromFile(FileName);
  bmp := TBitMap.Create;
  bmp.Assign(jpg);
  jpg.Free;
  Width := bmp.Width div Cols;
  Height := bmp.Height div Rows;
  SetLength(Result, Rows * Cols);
  idx := 0;
  for i := 0 to Rows - 1 do begin
    y := i * Height;
    for j := 0 to Cols - 1 do begin
      x := j * Width;
      Result[idx] := TBitMap.Create;
      Result[idx].Width := Width;
      Result[idx].Height := Height;
      Result[idx].Canvas.CopyRect(
        Rect(0, 0, Width - 1, Height - 1),
        bmp.Canvas,
        Rect(x, y, x + Width - 1, y + Height - 1)
      );
      inc(idx);
    end;
  end;
  bmp.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Images: TBitMaps;
  i, x: Integer;
begin
  Images := JPEGSlices('test.jpg', 2, 6);
  x := 20;
  for i := 0 to High(Images) do begin
    Canvas.Draw(x, 100, Images[i]);
    inc(x, Images[i].Width + 2);
  end;
  BitMapsFree(Images);
end;
Разрезает произвольную JPEG-картинку на кусочки, в процедуру передается количество строк и столбцов на которое надо нарезать картинку. Результат помещается в одномерный массив TBitMap-ов, массив заполняется построчно.

Последний раз редактировалось Arigato; 20.11.2018 в 11:58.
Arigato вне форума Ответить с цитированием
Старый 20.11.2018, 13:11   #4
garuna
Форумчанин
 
Аватар для garuna
 
Регистрация: 13.04.2013
Сообщений: 180
Радость

Arigato, всё прекрасно работает, спасибо огромное!
garuna вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с ветвлением и файлами (Pascal) - разрезать круглый торт на N равных частей LuLu53 Помощь студентам 7 12.10.2017 10:15
Разрезать картинку на буквы grafgrial Мультимедиа в Delphi 4 04.01.2011 21:04
Разрезать файл по частям KoBRaAndrey Общие вопросы Delphi 8 23.01.2010 19:03
сколькими способами можно разрезать прямоугольник на n-ное количество частей? 4ingiz Общие вопросы Delphi 2 31.01.2008 06:40
КАК поделить цыферблат часов на 10 равных частей? VALIK Общие вопросы Delphi 4 28.02.2007 19:51