|
Вопрос # 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 (статус: 3-ий класс), 22 июля 2011, 22:15 [#63]:
Они всегда молчат. Если что то простое/среднее то сразу отвечают, если что-то непонятное то задают вопросы, ну а в сложных случаях говорят общую картину. Идея про маску была Вадима, про отдельный формат - Миная, а я помогаю с реализацией. Попробовал записать TPicture и TImage через поток - работает.
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 22 июля 2011, 22:16 [#64]:
С TImage не работает вариант? Если нет сейчас напишу как через потоки это делать.
Чисти код! Чисти код! Чисти код!
|
|
Димон (статус: Посетитель), 22 июля 2011, 22:23 [#65]:
Неа, не работает((((
|
|
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 (статус: 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 (статус: 3-ий класс), 22 июля 2011, 22:48 [#69]:
Ну что программа сделана?
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 22 июля 2011, 22:53 [#70]:
Я у себя сделал в одной программе. Одна кнопка создаёт Picture.txt, другая подгружает его и загружает изображения. При клике правильно определяет где какая кнопка.
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 22 июля 2011, 22:54 [#71]:
Но создаваемый TImage не даёт менять свойства Left\Top.
Сейчас попробую решить.
Чисти код! Чисти код! Чисти код!
|
|
Димон (статус: Посетитель), 22 июля 2011, 22:55 [#72]:
Сейчас дописываю. У меня на одном компе инет с сайтом на другом программа))))
|
|
Gooddy (статус: 3-ий класс), 22 июля 2011, 22:58 [#73]:
Пофиксил, но придётся Image также создавать динамически.
Чисти код! Чисти код! Чисти код!
|
|
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 (статус: 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 (статус: 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] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|