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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2011, 21:24   #1
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию скопировать прямоугольник

помогите пожалуйста разбить картинку на 9 частей и скопировать каждую часть в отведенную для этого image
делаю так
Код:
iw[1][1]:=0;
    iw[1][2]:=170;
    iw[2][1]:=170;
    iw[2][2]:=340;
    iw[3][1]:=340;
    iw[3][2]:=510;
 
    raz:=wr/w;
    hn:=hr/raz;
 
    ih[1][1]:=0;
    ih[1][2]:=round(hn/3);
    ih[2][1]:=round(hn/3);
    ih[2][2]:=round(hn/3)+round(hn/3);
    ih[3][1]:=round(hn/3)+round(hn/3);
    ih[3][2]:=hn;
 
    //первый фрагмент
    sr:=rect(0,0,170,ih[1][2]);
    dr:=rect(0,0,170,170);
    form2.image1.Canvas.CopyRect(dr,image1.Canvas,sr);
    
    //второй фрагмент
    sr:=rect(170,0,340,ih[1][2]);
    dr:=rect(0,0,170,170);
    form2.image2.Canvas.CopyRect(dr,image1.Canvas,sr);
    ;
 
    //третий фрагмент
    sr:=rect(340,0,510,ih[1][2]);
    dr:=rect(0,0,170,170);
    form2.image3.Canvas.CopyRect(dr,image1.Canvas,sr);
    
 
    //четвертый фрагмент
    sr:=rect(0,ih[1][2],170,ih[2][2]);
    dr:=rect(0,0,170,170);
    form2.image4.Canvas.CopyRect(dr,image1.Canvas,sr);
    
 
    //пятый фрагмент
    sr:=rect(170,ih[1][2],340,ih[2][2]);
    dr:=rect(0,0,170,170);
    form2.image5.Canvas.CopyRect(dr,image1.Canvas,sr);
    
    //шестой фрагмент
    sr:=rect(340,ih[1][2],510,ih[2][2]);
    dr:=rect(0,0,170,170);
    form2.image6.Canvas.CopyRect(dr,image1.Canvas,sr);
    
 
    //седьмой фрагмент
    sr:=rect(0,ih[2][2],170,ih[3][2]);
    dr:=rect(0,0,170,170);
    form2.image7.Canvas.CopyRect(dr,image1.Canvas,sr);
    
 
    //восьмой фрагмент
    sr:=rect(170,ih[2][2],340,ih[3][2]);
    dr:=rect(0,0,170,170);
    form2.image8.Canvas.CopyRect(dr,image1.Canvas,sr);
    
 
    //девятый фрагмент
    sr:=rect(340,ih[2][2],510,ih[3][2]);
    dr:=rect(0,0,170,170);
    form2.image9.Canvas.CopyRect(dr,image1.Canvas,sr);
    
 
 
  end;
если использовать вместо структуры dr form2.Image.BoundsRect,то заполняется только первая imaga,а остальные белые
когда тестирую на картинке(первый скрин),то все вроде бы нормально(нарисовал в фотошопе,bmp)
когда беру картинку,которую переконвектировал из jpeg в bmp,то получается одинаковая картинка везде(2 скрин)

и еще вопрос,как можно испозьзовать еще и jpeg картинки? модуль jpeg добавил,но дает ошибку на функции CopyRect
Изображения
Тип файла: jpg Безымянный.jpg (102.0 Кб, 132 просмотров)
Тип файла: jpg Безымянный1.jpg (149.7 Кб, 127 просмотров)
spydark91 вне форума Ответить с цитированием
Старый 26.07.2011, 23:17   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
var
  ...
  BM : TBitMap;
begin
  BM := TBitMap.Create;
  try
    //преобразование картинки в формате jpeg в bitmap (в Image1 загружено изображение ipeg)
    BM.Width := Image1.Width;
    BM.Height := Image1.Height;
    BM.Canvas.Draw(0, 0, image1.Picture.Graphic); 

    w := Image1.Width div 3; 
    h := Image1.Height div 2;

    //первый фрагмент
    sr := rect(0, 0, w, h);
    dr := rect(0, 0, w, h);
    form2.image1.Canvas.CopyRect(dr, BM.Canvas, sr);

    //второй фрагмент
    sr := rect(w, 0, w*2, h);
    form2.image2.Canvas.CopyRect(dr, BM.Canvas, sr);

    ...
  finally
    BM.Free;
  end;
end;
И в цикле копировать желательно.

Последний раз редактировалось Прик; 26.07.2011 в 23:23.
Прик вне форума Ответить с цитированием
Старый 27.07.2011, 21:17   #3
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

а как тут можно использовать функцию draw? когда ее юзаю качество не меняется,но не знаю как,используя ее, разбить картинку на фрагменты
spydark91 вне форума Ответить с цитированием
Старый 27.07.2011, 22:40   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В примере все проблемы разжеваны и в рот положены.
Попробуем еще раз.
1. Грузим в Image1 картинку в формате jpeg.
2. Создаем Bitmap размером с загруженную картинку.
3. С помощью метода Draw копируем ВСЮ картинку из Image1 в созданный Bitmap (это копирование и есть преобразование формата jpeg в растровый bitmap).
4. Теперь орудуем только с изображением, которое находится на Bitmap'е: режем, копируем в другие TImage.
Так же как ранее делали с изображением на Image1.
Прик вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прямоугольник ronny137 Помощь студентам 2 21.04.2011 19:34
прямоугольник с размерами A*B. xamelion Общие вопросы Delphi 1 17.10.2010 10:39
Прямоугольник с тенями SashaN Помощь студентам 4 14.05.2010 14:22
C#, прямоугольник Goldcoding Фриланс 2 09.04.2010 20:34
прямоугольник(масм) Дініс Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 21.12.2009 07:33