Часть из Image вырезать?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Часть из Image вырезать?

Сообщение McLion »

Всем привет,

у меня на форме Image1 и Image2. Хочу вырезать маленький прямоугольник их Image1 и показать его в Image2. Как это сделать?

Спасибо!
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Скорее всего через Canvas. Должен быть метод на подобие CopyRect
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Так точно, уже сделал. Теперь только проблемка, в какое событие это засунуть, чтоб при запуске срабатывало, а то в ObShow, OnPaint, OnResize все черно, то-есть не рисует.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Попробуйте вставить в Image1PictureChanged
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Тоже не хоче... ошибку выдает.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Alex2013
долгожитель
Сообщения: 3233
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

А картинка на которую копируешь фрагмент инициализирована ?
Еще возможно нужно принудительно нарисовать белый фон ..
В общем гадать можно долго так что лучше посмотри как я разбирался с подобными проблемами тут
ИзображениеИзображение

:arrow: viewtopic.php?f=5&t=10313 (это рабочая тема, что бы понять для чего я "огород городил" )
:arrow: Nv_BETA003M.zip А это собственно софтина (относительно свежая версия )
(Исходники прилагаются )
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

@Alex2013 пасиб, буду смотреть.

Еще вопрос по CopyRect, как я понял он копирует нарисованную картинку. А не подскажите функцию которая из картинки копирует которая лежит на диске или в ресурсах?
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

McLion писал(а):А не подскажите функцию которая из картинки копирует которая лежит на диске или в ресурсах?
Нет таких функций, там лежит не картинка, а набор байтов. Чтобы из них получилась картинка, их надо преобразовать, а самый простой способ - это стандартно загрузить и нарисовать. На канве вспомогательной переменной, как это обычно делают.
CynicRus
постоялец
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Сообщение CynicRus »

McLion писал(а):@Alex2013 пасиб, буду смотреть.

Еще вопрос по CopyRect, как я понял он копирует нарисованную картинку. А не подскажите функцию которая из картинки копирует которая лежит на диске или в ресурсах?


можной считать в одномерный массив структур типа

Код: Выделить всё

  TRGB32 = packed record
    B, G, R, A: Byte;
  end;

и потом вот так:

Код: Выделить всё

for i := x to y do
    Move(self.FData[i * self.w + x], Result.FData[(i-y) * result.w],result.Width * SizeOf(TRGB32));
Alex2013
долгожитель
Сообщения: 3233
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Прямо с диска читать смысла нет ... Но можно вырезать с загруженного но "не нарисованного" на форме TBitMap (или TImage так как он поддерживает больше форматов при загрузке )..
var B:TBitMap;
...
B:=TBitMap.Create;
B.LoadFromFile(...);
...
// тут копируем что надо и куда надо через Canvas.CopyRect...
B.free;
Зы
Прямая бинарная операция типа Move может привести к большим неприятностям, так как никто не знает заранее что за формат у контекста на который и с которого копируешь ....
(Некоторые редакторы например поверяют изображение при записи и пишут не спрашивая например в однобитном формате. :idea: Загружаешь думая что там стандартный RGB ... но тут-то и наступает программе полный капут ! :mrgreen: )
CynicRus
постоялец
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Сообщение CynicRus »

Alex2013 писал(а):(Некоторые редакторы например поверяют изображение при записи и пишут не спрашивая например в однобитном формате. :idea: Загружаешь думая что там стандартный RGB ... но тут-то и наступает программе полный капут ! :mrgreen: )

Дык проверять нужно, чего читаешь-))) А если сам пишешь, сам читаешь - то вообще никаких проблем-)
Ответить