Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 468

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Задача следующая. Есть image1 с загруженной картинкой.
Необходимо "порезать картинку на части и каждую часть сохранить в отдельный файл. Желательно "обход" картинки делать в следующем порядке: н.п. картинка из частей 4х4 -
слева направо 1-ряд 1,2,3,4 потом второй ряд 5,6,7,8 и т. д. Названия файлов соответстенны названиям копируемых частей.
Конечно же пробовал сам (Canvas.CopyRect), но никак не могу
нормально организовать работу в цикле.
Задача вроде не сложная, но я в недоумении. Помогите пожалуйста.

timkit Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: timkit (статус: Посетитель)
Вопрос отправлен: 2 декабря 2009, 06:05
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ну вот написал я тебе примерчик. Прицепляю к ответу.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 2 декабря 2009, 10:59


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 2 декабря 2009, 14:10; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 2 декабря 2009, 08:28 [#1]:

Цитата (timkit):

но никак не могу нормально организовать работу в цикле.


Что конкретно не получается?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
timkit

timkit (статус: Посетитель), 2 декабря 2009, 09:13 [#2]:

Опишу более конкретно, что сделал я.
На форме есть 2 компонента Image, Paintbox, Button.
Image1-собственно компонент с исходным изображением, Paintbox- своего рода зонд (копирует в себя част изображения и перемещается по Image1), Image2 - показывает что в данный момент скопировал PaintBox и одновременно сохраняет текущее изображение в файл, кнопка для запуска цикла. PaintBox и Image2 имеют одинаковые размеры (у меня 20х20 пкс).
Приведу свой код:


 
// В данном примере загруженное изображение размером 640х480
 
procedure TForm1.ButtonClick(Sender: TObject);
var
i,j:integer;
begin
//Устанавливаем Paintbox в начало координат Image1
paintbox1.Left:=Image1.Left;
paintbox1.Top:=Image1.Top;
 
 
for j := 0 to (Image1.Height div PaintBox1.Height) do
for i := 0 to (Image1.Width div PaintBox1.Width) do
 
// Если  (i>32) т.е. ((Image1.Width div PaintBox.Width)=
// 640/20 =32) Определяем что PaintBox дошел до края Image1.
begin
if i>32 then 
// Если PaintBox дошел до края Image1, то устанавливаем 
// положение PaintBox в исходное
 
begin
paintbox1.Left:=image1.Left;
end;
 
paintbox1.Left:=(paintbox1.Width*i)-PaintBox1.Width;
 
if i&>32 then
// Также если PaintBox дошел до края Image1 то опускаем 
// PaintBox на следующий ряд
 
begin 
paintbox1.Top:=paintbox1.Top+paintbox1.Height;
end;
 
paintbox1.Top:=(paintbox1.Height*j)-PaintBox1.Height;
 
Image2.Canvas.CopyRect(PaintBox1.Canvas.ClipRect,PaintBox1.Canvas,Image2.ClientRect);
Image2.Picture.SaveToFile('C:\'+inttostr(i*j)+'.jpg');
end;
end;

В итоге после прхождения первого ряда все копирование иде черт знает как (хаотично). Для удобства восприятия я сделал картинку разлинованную на квадраты и пронумеровал каждый квадрат. Я бы скинул картинку только не знаю куда?
min@y™

min@y™ (статус: Доктор наук), 2 декабря 2009, 09:39 [#3]:

Жуть какая.
Вопрос поставлен неправильно. Если это "есть картинка MxN пикселей, надо её разбить на XxY фрагментов. Как это сделать?", то я не понимаю, зачем PaintBox1 и Image2.

З.Ы. Отформатируй код нормально, а то вообще не читабельный он.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
timkit

timkit (статус: Посетитель), 2 декабря 2009, 09:54 [#4]:

В принципе наличие Paintbox и Image2 не принципиально, если есть какой то другой способ, поскажите.
Согласен, что корявый способ, но сам больше ничего не придумал.
timkit

timkit (статус: Посетитель), 2 декабря 2009, 14:10 [#5]:

Спасибо min@y! Буду учиться :)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.03 сек.