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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2010, 18:19   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Позиционное копирование изображение в Image

Работая дальше над своей программой, столкнулся со следующим. . Возникла необходимость отрисовывать некоторое изображение, которое находится в Image1 на Image2. Казалось бы все просто. Перекинуть его просто да и все. Ан нет, тут задачка гораздо сложнее . Итак, в Image1 хранится изображение как во вложении №1. Его на нем будет отрисовываться некий текст. И это изображение должно поместиться (ну, или скопироваться) на большой Image2. Вместе с отрисованным текстом. Вообщем-то, проблем с отрисовкой текста на первом Image1 проблем нет. Проблема с переносом его на Image2. Сложность заключается в том, что скопированные изображения должны друг за другом, начиная слева направо располагаться. Причем фишка в чем. В том, что значения в качестве текста должно будет последовательно браться из таблицы, каждый раз отрисовываться на Image1 и копироваться друг за другом на Image2 в таком же порядке, как и в каком они отрисовывались. Размеры Image2 менять нельзя. В конечном итоге должен получиться заполенный лист как во вложении №2. Сейчас я его руками нарисовал и думал просто отрисовывать текст на каждом из них, но, мне же заранее неизвестно сколько у меня будет чисел (текста) браться. Вот как можно организовать это самое копирование? Очень нужно.
Изображения
Тип файла: bmp №1.bmp (15.5 Кб, 130 просмотров)
Вложения
Тип файла: zip №2.zip (268.4 Кб, 14 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.06.2010, 20:25   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Зачем так усложнять? Это все можно рисовать прямо на большой канве, MoveTo, LineTo методы.
Можно и копировать, CopyRect для этого юзай. Текст рисует TextOut. Настройки шрифта в Canvas.Font...
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 01.07.2010, 01:49   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Это все можно рисовать прямо на большой канве, MoveTo, LineTo методы.
Отрисовыватьь-то можно попробывать так, но как быть если у меня будет нужно 10 штук нарисовать? 20? 50? 300? Нужно же как-то задавать смещение. Я попробую записать видео как должно работать, чтобы понятнее было)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.07.2010, 08:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Зачем так усложнять?
Ты не первый кто автору это глаголит

Цитата:
20? 50? 300? Нужно же как-то задавать смещение.
Для таких "плиток" (стиль thumbnails - может слышал) есть DrawGrid.
Рисуй в его ячейках - и будет тебе счастье.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2010, 09:45   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А можно пример как рисовать в нем?). Заиметь бы процедуру, которая будет рисовать в каждой ячейке то, что мне нужно, от я бы рад был))
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.07.2010, 09:55   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да пожалуйста:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TForm1 = class(TForm)
    DrawGrid1: TDrawGrid;
    procedure FormCreate(Sender: TObject);
    procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var  b:TBitmap;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 b:=TBitmap.Create;
 b.LoadFromFile('D:\stasya_ru_2_big.bmp');
end;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 StretchBlt(TDrawGrid(sender).Canvas.Handle,rect.Left,rect.Top,
  rect.Right-rect.Left,Rect.Bottom-Rect.Top,b.Canvas.Handle,0,0,b.Width,b.Height,SRCCOPY);
end;

end.
Делов то...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2010, 11:46   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Попробовал. Запустил приложение и получил ошибку как на скриншоте. Даже без понятия о чем она. Наверное попытка обращения к несуществующему объекту?
Изображения
Тип файла: bmp error.bmp (317.8 Кб, 124 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.07.2010, 11:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А разобраться?
А пошаговку?
Неужели отменили?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2010, 12:00   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ну вот что мне выдал отладчик. Кажется выделил STrechBlt...
Изображения
Тип файла: jpg stepby.jpg (35.8 Кб, 115 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 01.07.2010, 12:36   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
artemavd
Ох горечко ты специализированное )))
А вот скажи тебя не напрягает то что ты в обработчике отрисовки описал какую то левую локальную переменную, и не создал в нее обьект?

Посмотри внимательно мой пример - вни-ма-тель-но
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изображение в image _-Re@l-_ Общие вопросы Delphi 2 16.05.2010 11:57
image не появляется изображение borik120 Microsoft Office Excel 1 23.02.2010 01:01
Копирование Image mustang007 Компоненты Delphi 3 10.06.2009 22:21
Как сохранить изображение Image и всё что на нём, в файл? Лукманов Александр Мультимедиа в Delphi 3 24.05.2009 00:16
как вращать изображение в image ИЛ87 Помощь студентам 2 15.12.2007 19:47