Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Вниз

TStrings   Найти похожие ветки 

 
Agent[007]   (2004-01-26 18:55) [0]

Почему строки грузятся не полностью, а только первые 5 - 6 символов?

...
a:tmemo;
...
a.lines.loadfromfile("a.bmp");
...


 
Palladin   (2004-01-26 18:57) [1]

попробуй удачи с exe файлом... там может побольше загрузится... на два три символа...


 
TUser   (2004-01-26 19:02) [2]

Ваще, если тебе удалось 5-6 строк из bmp грузануть - мои поздравления. Тут недавно обсуждался вопрос, как bmp в TStrings засунуть, я привел код - ищи в форуме. При такой загрузке у меня грузилось только "BMP|" и все.
А по сабжу - while not EOF(filevar) do begin ... end;


 
Юрий Зотов   (2004-01-26 20:00) [3]

> Agent[007] © (26.01.04 18:55)

Разве в школе разведчиков не обьясняли разницу между текстом и картинкой?


 
Agent[007]   (2004-01-26 22:18) [4]

мне надо текст в *.bmp загрузить во что-то и потом изменить и сохранить. Через файлы долго.


 
Митяй2   (2004-01-26 22:50) [5]

Читай файл не по байтам, а блоками быстрее будет...


 
MadGhost   (2004-01-26 23:06) [6]

по моему этому посту прямая дорога в "Орешник".


 
Германн   (2004-01-27 01:14) [7]

Наверно, у него (Agent[007] ©) банкнота сгорела полностью, в отличии от известной рекламы. И другого выхода передать информацию, кроме через файл, у него нет. :(
:)))


 
sniknik   (2004-01-27 08:56) [8]

> мне надо текст в *.bmp загрузить во что-то и потом изменить и сохранить. Через файлы долго.
думаеш loadfromfile не через файл работает? а через что тогда?
долго в твоей реализации, ее и меняй, > Митяй2 (26.01.04 22:50) [5]


 
TUser   (2004-01-27 10:25) [9]

В TBitMap его надо загружать.


 
YuRock   (2004-01-27 10:38) [10]

Быстрее всего через ReadFile() загрузить в память, там изменить, а затем в файл записать.

P.S. Вот только что там изменять :))
Если уж что-то подобное делать, надо оперировать функциями GetDIBits/SetDIBits


 
Некто   (2004-01-27 11:18) [11]

TStrings может хранить только текстовую информацию (коды символов выше $20) .Любой бинарный файл (в том числе и .BMP) содержит любые символы (от $00 до $ff), которые при загрузке в TStrings воспринимаются как разделители строк. Поэтому и получается "каша".

P.S. Не рановато ли взялся за обработку графики?


 
Юрий Зотов   (2004-01-27 13:52) [12]

> Некто (27.01.04 11:18) [11]

TStrings действительно может хранить в себе только текстовую информацию, но это не коды символов выше $20, а все коды, кроме нулевого.

Например, переводы строк (#13#10) вполне успешно хранятся, не так ли?


 
Agent[007]   (2004-01-27 14:08) [13]

Я хотел сделать так, чтобы графику из моей проги никто не воровал простым методом.

У меня есть БМП. Грузим её в строки, как обычный текст и каждый символ изменяем, например:

for i:=0 to count do
for j:=0 to length do
strings[i,j]:=Chr(Ord(strings[i,j]) + 50);


Вот это я и хочу с битмапами сделать.


 
alex_***   (2004-01-27 14:13) [14]

Маньяк. Сделай xor для заголовка bmp


 
Некто   (2004-01-27 14:19) [15]

2 Agent[007]

...и картинка становится ярче... или темнее; с артефактами при переполнении...
Забудь об этом! Обрабатывать растр как последовательность символов - это абсурд! Такая обработка займет уйму времени!

2 Юрий Зотов

Это точно... :)... А вот станет ли он хранить ";" в случае Delimiter = ";"? :)... ("Провокация!" (С))


 
Юрий Зотов   (2004-01-27 14:20) [16]

> Agent[007] © (27.01.04 14:08) [13]

> У меня есть БМП. Грузим её в строки, как обычный текст
> и каждый символ изменяем

1. Нельзя загрузить, как обычный текст то, что обычным текстом не является.

2. Вообще-то, кроме массивов символов (т.е. строк) существуют еще массивы байт. Которые могут содержать ЛЮБУЮ информацию и которые можно точно так же кодировать и декодировать.

> Я хотел сделать так, чтобы графику из моей проги никто не
> воровал простым методом.

Самый простой метод своровать графику из любой программы - это клавиша Print Screen плюс программа Paint. И все Ваше кодирование тут же становится никому не нужным.


 
GrayFace   (2004-01-27 14:55) [17]

Юрий Зотов © (27.01.04 13:52) [12]
Как раз коды #13#10не хранятся. Они приводят к созданию новой строки. В результате #10, #13 и #13#10 неразлечимы.

Agent[007] © (27.01.04 14:08) [13]
Используй, например, AsPack.


 
Юрий Зотов   (2004-01-27 15:24) [18]

> GrayFace © (27.01.04 14:55) [17]
> Как раз коды #13#10не хранятся.

Речь не идет о том, хранятся ли они в конкретно в TStrings, или вставляются динамически в GetTextStr. Речь идет о том, что в длинной строке ничто не мешает хранить любые символы, кроме #0. И это действительно так и есть.


 
alex_***   (2004-01-27 15:28) [19]


FS := StringOfChar(#0,20);
ShowMessage(IntToStr(Length(FS)));

и что мешает хранить 0 ?


 
Юрий Зотов   (2004-01-27 16:21) [20]

> alex_*** © (27.01.04 15:28) [19]

Еще одну строчечку добавьте - сами увидите:

FS := StringOfChar(#0, 20);
ShowMessage(IntToStr(Length(FS)));
ShowMessage("Начало" + FS + "Конец");


Так что ХРАНИТЬ - ничто не мешает. А вот ПОЛУЧИТЬ - мешает. А какой смысл хранить то, чего нельзя получить? Это уже игра в Мавроди называется.


 
alex_***   (2004-01-27 16:37) [21]

ну как это получить нельзя... работать как с массивом байтов. Изврат, конечно... Но агент хотел же через строки...


 
Th   (2004-01-27 16:47) [22]

о воровстве графики...

я может ошибаюсь, но есть такая клавиша - PrintScreen


 
Agent[007]   (2004-01-27 17:08) [23]

ну изменить то с принт скрином нельзя, а если БМП будет просто так храниться, то её изменит какои-нибудь дурак и выдаст, как своё.

2 GrayFace

че ещё за AsPack?


 
Тимохов   (2004-01-27 17:12) [24]


> Agent[007] © (27.01.04 17:08) [23]

Конечно нельзя изменить. Можно сохранить в файл из буфера. А потом изменить. И конечно же потом выдать за совое. :))))


 
Agent13   (2004-01-27 17:17) [25]

2Agent[007]:

А ты возьми, и на поверх своих битмэпов, (если конечно они у тебя не миниатюрные вроде иконок), каким-нибудь бледным цветом, (чтобы глаз не резало) напиши: "Agent[007]",вот это негодяи точно замучаются выдирать :)


 
Юрий Зотов   (2004-01-27 17:18) [26]

> alex_*** © (27.01.04 16:37) [21]

> ну как это получить нельзя... работать как с массивом байтов.
См. [16], пункт 2. Но напомню, что Вы говорили о нуле именно в СТРОКЕ, а не в массиве байт.

> Но агент хотел же через строки...
Что ж, хотеть не вредно. Я вот на Луну хочу.


 
Th   (2004-01-27 17:18) [27]

Ну если очень хотите защитить картинки в ехе, (хотя по мне это бессмысленно, картинки в программах - далеко не главное, я бы на вашем месте больше функциональной части уделял внимания), то можно сделать так:
1. с помощью WinAPI функций для работы с ресурсами выцепить нужную картинку из exe файла (она будет у вас "в руках" в виде так называемого memory bitmap);
2. с помощью WinAPI функций каждую точку закодировать - например xor"ом, как предлагали, при этом не забыть различать форматы bitmap"а (1 bpp, 8 bpp, 16 bpp, 24 bpp, 32 bpp)
3. сохранить bitmap обратно в ресурс

Все будет "не через файлы", быстро и красиво. Но для реализации человеком вашего опыта надо много читать...


 
Th   (2004-01-27 17:20) [28]

PS последний пост для Agent[007]


 
Юрий Зотов   (2004-01-27 17:21) [29]

> Th (27.01.04 17:18) [27]

См. конец поста [16].


 
Тимохов   (2004-01-27 17:21) [30]

Еще предложение - всю графику запихнуть в ехе, но пользователю не показывать вообще.


 
Th   (2004-01-27 17:23) [31]

> Юрий Зотов

Простите, вашу реплику про волшебную клавишу пропустил, но как видите, здесь все хитрее.. ;)))


 
Юрий Зотов   (2004-01-27 17:26) [32]

> Th (27.01.04 17:23) [31]

Видимо, да. В связи с чем, самое правильное предложение дано в [30].
:о)


 
Тимохов   (2004-01-27 17:28) [33]


> Видимо, да. В связи с чем, самое правильное предложение
> дано в [30].
> :о)

Я знал, что вы оцените мою шутку :)))))))


 
TUser   (2004-01-27 18:43) [34]

Чтобы графику не воровали, надо в программе, написанной на ворованной Delphi, использовать графику с электронной подписью. Если своруют - подавать в суд. Правда, все равно воровать будут.


 
ak   (2004-01-29 11:36) [35]

> Юрий Зотов [20]

а ShowMessage(IntToStr(Length("Начало" + FS + "Конец"))) пробовал?
прсто в ShowMessage вызывается Windows.DrawText, который не рисует строку дальше 1го нуля. а получить ее и сохранить обратно в картинку ничего не мешает. только все 0D и 0A заменятся на 0D0A,
но это другой вопрос.


 
VMcL   (2004-01-29 13:07) [36]

>>Agent[007] © (26.01.04 22:18) [4]
>мне надо текст в *.bmp загрузить во что-то и потом изменить и сохранить. Через файлы долго.

TFileStream и/или TMemoryStream ни в какую?



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.008 c
1-53616
Анатолий
2004-02-07 12:30
2004.02.17
Опять по автоматическому обнновлению программы


7-53778
Ил_204
2003-12-02 13:08
2004.02.17
Com-порт, модем


7-53783
Rentgen
2003-12-02 07:06
2004.02.17
Свойства ярлыков


1-53472
xz-man
2004-02-06 04:06
2004.02.17
Mdi-forms


1-53550
Speed
2004-02-05 13:12
2004.02.17
Алгоритм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский