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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 5 518

/ вопрос решён /

Доброго времени суток, уважаемые эксперты! подскажите пожалуйста как
в изображения добавить ссылочные надписи? Что для этого нужно сделать? Изображения добавлены в TImage.

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

Димон Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Димон (статус: Посетитель)
Вопрос отправлен: 22 июля 2011, 09:47
Состояние вопроса: решён, ответов: 0.


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

Всего сообщений: 114; последнее сообщение — 25 июля 2011, 07:49; участников в обсуждении: 6.

Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [6] [Следующая »]

Димон

Димон (статус: Посетитель), 22 июля 2011, 22:07 [#61]:

Да Вам вообще отдельная благодарность, потому что остальные как то молчат эксперты. Даже странно.
Димон

Димон (статус: Посетитель), 22 июля 2011, 22:11 [#62]:

Подойдет любая помощь, спасибо. Просто если программа будет содержать 500 000 изображений получится еще столько же масок к ним. И если нехорошие юзеры начнуть копать, то могут удалить маски, после чего пойдут баги, что не есть хорошо, да и вообще зачем людям копаться в нашем неизвестном файле. Все равно Вам спасибо. Помогите чем можете, может кто то еще откликнется и разовьет наши с Вашими мыслями
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 22:15 [#63]:

Они всегда молчат. Если что то простое/среднее то сразу отвечают, если что-то непонятное то задают вопросы, ну а в сложных случаях говорят общую картину. Идея про маску была Вадима, про отдельный формат - Миная, а я помогаю с реализацией. Попробовал записать TPicture и TImage через поток - работает.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 22:16 [#64]:

С TImage не работает вариант? Если нет сейчас напишу как через потоки это делать.
Чисти код! Чисти код! Чисти код!
Димон

Димон (статус: Посетитель), 22 июля 2011, 22:23 [#65]:

Неа, не работает((((
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 22:30 [#66]:

Ну тогда вот.
 
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
begin
//загрузка изображений из файлов
image1.Picture.LoadFromFile('c:\1.bmp');
image2.Picture.LoadFromFile('c:\2.bmp');
 
//сохранение изображений в один файл
ms:=TMemorystream.Create;
ms.WriteComponentRes('Picture',Image1);
ms.WriteComponentRes('Picture',Image2);
ms.SaveToFile('c:\Picture.txt');
 
//отчистка изображений
Image1.Canvas.FillRect(Image1.Canvas.ClipRect);
Image2.Canvas.FillRect(Image2.Canvas.ClipRect);
 
//Загрузка изображений из файла. (для проверки)
ms.Clear;
ms.LoadFromFile('c:\Picture.txt');
ms.ReadComponentRes(Image1);
ms.ReadComponentRes(Image2);
 
//завершение всяких штук
ms.Free;
end;

Как видно необходимы 2 TImage (можно и динамически создавать, но тогда не будет видно результата (для проверки)), т.к. напрямую TPicture сохранить через поток не получится.

Этот код уже проверил, работает.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 22:40 [#67]:

Итак, запаковщик файлов сделан.

Теперь нужно сделать программу, работающую с таким файлом и определяющую по какой кнопке нажал пользователь.

Делаем так.

Создаём Image:TImage на форме нужного размера.

var
  Mask: TImage;
  MemoryStream: TMemoryStream;
 
//загрузка
begin
  Mask:=TImage.Create(nil);
  MemoryStream:=TMemoryStream.Create;
  MemoryStream.ReadComponentRes(Image);
  MemoryStream.ReadComponentRes(Mask);
  MemoryStream.Free;
end;
 
//клик
ImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  ButtonNumber: Integer;
begin
  ButtonNumber:=Mask.Canvas.Pixels[X,Y];
  if ButtonNumber<>0 then
  ShowMessage('Вы кликнули по кнопке '+IntToStr(ButtonNumber));
end;
Чисти код! Чисти код! Чисти код!
Димон

Димон (статус: Посетитель), 22 июля 2011, 22:41 [#68]:

Так, ну он мне сделал тхт файлик на 3264338 байт. Но как его в Image всунуть на отображение??? И будут ли там ссылки видны
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 22:48 [#69]:

Ну что программа сделана?
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 22:53 [#70]:

Я у себя сделал в одной программе. Одна кнопка создаёт Picture.txt, другая подгружает его и загружает изображения. При клике правильно определяет где какая кнопка.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 22:54 [#71]:

Но создаваемый TImage не даёт менять свойства Left\Top.
Сейчас попробую решить.
Чисти код! Чисти код! Чисти код!
Димон

Димон (статус: Посетитель), 22 июля 2011, 22:55 [#72]:

Сейчас дописываю. У меня на одном компе инет с сайтом на другом программа))))
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 22:58 [#73]:

Пофиксил, но придётся Image также создавать динамически.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 23:01 [#74]:

Вобщем чтение итогового файла будет выглядеть так:
  Image:=TImage.Create(Form1);
  Mask:=TImage.Create(nil);
  MemoryStream:=TMemoryStream.Create;
  MemoryStream.LoadFromFile('c:\Picture.txt');
  MemoryStream.ReadComponentRes(Image);
  MemoryStream.ReadComponentRes(Mask);
  MemoryStream.Free;
  Image.Parent:=Form1;
  Image.OnMouseDown:=ImageMouseDown; //установка события срабатывающего при клике.
  //Установка необходимых параметров Image, положение в окне, размеры и т.д.
  Image.Left:=100;
Чисти код! Чисти код! Чисти код!
Димон

Димон (статус: Посетитель), 22 июля 2011, 23:02 [#75]:

Что то показывает ошибку Invalid Stream Format
var
Mask: TImage;
MemoryStream: TMemoryStream;

//загрузка
begin
Mask:=TImage.Create(nil);
MemoryStream:=TMemoryStream.Create;
MemoryStream.ReadComponentRes(Image);
MemoryStream.ReadComponentRes(Mask);
MemoryStream.Free;
end;

этот код поставил на кнопку

ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
ButtonNumber: Integer;
begin
ButtonNumber:=Mask.Canvas.Pixels[X,Y];
if ButtonNumber<>0 then
ShowMessage('Вы кликнули по кнопке '+IntToStr(ButtonNumber));
end;

А этот на маусдаун и ошибка

Я не пойму немного структуры кода на кнопку
Там получается придется переменную Image брать???
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 23:08 [#76]:

ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

Это заголовок процедуры-обработчика.

нужно написать так

procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

И прописать её в заголоке TForm1:


TForm1 = class(TForm)
...
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
...
private
...
end;
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 22 июля 2011, 23:10 [#77]:

Когда сдавать работу?
Чисти код! Чисти код! Чисти код!
Димон

Димон (статус: Посетитель), 22 июля 2011, 23:15 [#78]:

Работу сдавать в мае, но до мая нужно обработать сотню тысяч изображений и еще базу данных заполнить, а там на одно изображение еще десять как раз наших ссылок. Ну это типа каталога частей бытовой техники. Работы еще вагон вот и решил что надо начинать сейчас, потому что помимо этого еще по 12 часов в день работаю
Димон

Димон (статус: Посетитель), 22 июля 2011, 23:17 [#79]:

Блин ну я думаю что должен в принципе теперь подразобраться. Может где то как то должно выйти как положено. И все равно не могу понять вот ту суть что программа выдает номер кнопки. Как это получается?? По какому принципу. Это для меня фантастика. Тут еще нашел информацию когда мы уже с Вами посмотрели и создали.

OpenDialog1.Execute;
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
OpenDialog2.Execute;
Image2.Picture.LoadFromFile(OpenDialog2.FileName);
Image1.Canvas.Draw(Image1.Width-Image2.Width,Image1.Height-Image2.Height,Image2.Picture.Graphic);
SaveDialog1.Execute;
Image1.Picture.SaveToFile(SaveDialog1.FileName);

Попробовал, наш файл накладывается на основное изображение, но как с ним ссылки создавать не знаю
Димон

Димон (статус: Посетитель), 22 июля 2011, 23:18 [#80]:

Просто не могу понять как по цвету получается такая штука

Страницы: [« Предыдущая] [1] [2] [3] [4] [5] [6] [Следующая »]

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 03:00
Выполнено за 0.04 сек.