![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PNG+Delphi
Oleg_teacher © (2010-12-17 21:07:00)Надо обьеденить 100 картинок пнг (то есть разместить их последовательно сотворив при етом 1 полотно (файл)). Использую..TPngImage делфи 2010.
В связке с Image1.Canvas.Draw:
Image1.Canvas.Draw(i-*256,j-*256,png); все на маленьких количествах получается... но когда хочу обьеденить 1000 файлов то віходит за рамки памяти наверное так как пишет ошибку. Как с етим поборотся...что можете предложить?
Oleg_teacher (2010-12-19 13:32:00) [21]хм... я даже непонимал что вы хотите увидеть весь мой код. Частями основное я вроде давал.
ок...
var png:TPngImage;
i,j:integer;
s:string;
begin
png:=TPngImage.Create;
Image1.Width:=(StrToIntDef(Edit3.Text,-1)-StrToIntDef(Edit2.Text,0)+1)*256;
Image1.Height:=(StrToIntDef(Edit5.Text,-1)-StrToIntDef(Edit4.Text,0)+1)*256;
for j:=StrToIntDef(Edit4.Text,0) to StrToIntDef(Edit5.Text,-1) do
for i:=StrToIntDef(Edit2.Text,0) to StrToIntDef(Edit3.Text,-1) do
begin
s:=Edit1.Text+IntToStr(j)+'\'+IntToStr(i)+'.png';
png.LoadFromFile(s);
Image1.Canvas.Draw((i-StrToIntDef(Edit2.Text,0))*256,(j-StrToIntDef(Edit4.Text,0))*256,png);
end;
png.Assign(Image1.Picture.Bitmap);
png.Free;
end;
sniknik (2010-12-19 11:45:00) [22]> Суть такая что задача для малых входных данных реализовано,но для больших нет...
суть такая, что машина по дорогам ездит, а то трассам нет...
и что это добавило?
> Если некому ничего добавить, тогда вопрос снят.
партизаны не сдаются! что угодно, лишь бы свой набор глюков называемый кодом не показывать...
Oleg_teacher (2010-12-19 11:22:00) [23]ок. спасибо большое за разъяснение...
Суть такая что задача для малых входных данных реализовано,но для больших нет...
Если некому ничего добавить, тогда вопрос снят.
sniknik (2010-12-19 11:16:00) [24]> если вы хотите сказать что ето невозможно сделать...
я хочу сказать, что твое понимание ситуации невозможно - работа внутри архивов без раз архивации, а вот реальность еще не определена... т.к. до сих пор нет понятного кода и конкретных цифр. (1000 файлов из [0] это всего 62 мегабайта, что имхо вполне реально, но дальнейшее и действия наводят на мысль о попытке втиснуть 1000*1000 файлов, если не по количеству так по распределению в общей картинке, что уже нереально)
> так как все что вы написали я могу назвать редактированием, но не добавлением
добавлением можно считать добавление файла в не непрерывный архив, там где у файла собственный заголовок (таблица кодирования... смутно помню, на 4м курсе изучали), т.е. там где архив составляет собой фактически список мини архивов.
в переводе на картинки, ты тоже можешь, и легко, составить список из отдельных png.
но ты то пытаешься втиснуть все в один, а это непрерывный/или 1 файл.
Oleg_teacher (2010-12-19 10:46:00) [25]
> ну или сделай архив другого файла, после из готового архива
> вырежи определенный кусок текста (в архивированном виде
> естественно) и вставь/добавь его в первый... получилось?
>
ето все я реально почему то считаю пока пустой болтовней.... если вы хотите сказать что ето невозможно сделать... так и скажите, а потом начну спрашивать почему не возможно...
По сути с файлом ход ваших мыслей понятен... но вы для меня плохо пример приводите... так как все что вы написали я могу назвать редактированием, но не добавлением, а ето разные понятия (ну я пока так думал, может и ошибаюсь).....
Oleg_teacher (2010-12-19 10:40:00) [26]>архивирования совпало с временем добавления?
уверен что не совпадет.
> не путай программную реализацию и алгоритм. программная
> для пользователя, если ты пользователь, то бросай программировать.
>
отличная помощь. Спасибо вам огромное.
П.С. Для других пользователей форума.... Вопрос еще не закрыт.
sniknik (2010-12-19 10:38:00) [27]по другому вариант, если не понятно с непрерывным, берешь 1 большой текстовый файл, архивируешь и ищешь в архиваторе функцию "изменить без разархивирования". как найдешь скажешь. ну или сделай архив другого файла, после из готового архива вырежи определенный кусок текста (в архивированном виде естественно) и вставь/добавь его в первый... получилось?
sniknik (2010-12-19 10:29:00) [28]> к архивному виду можно добавить.... при етом не обязательно все розархивировать.
ну попробуй, сделай в например rar большой "непрерывный архив" (чтобы не делало блоков по файлам, куда можно "втиснуться", т.е. приблизить к однофайловому варианту, как и рисунок в png). большой это где то гиг, чтобы было очевидно. после добавь к нему файл, и аналогично тот же файл заархивируй одиночно. сравни время. время "голого" архивирования совпало с временем добавления? тогда сорри я не прав.
не путай программную реализацию и алгоритм. программная для пользователя, если ты пользователь, то бросай программировать.
Oleg_teacher (2010-12-19 10:19:00) [29]
> в уже архивированном виде ничего не вставляется. почитай
> про "какое-то сжатие", принципы архивирования.
не согласен.... к архивному виду можно добавить.... при етом не обязательно все розархивировать.
Oleg_teacher (2010-12-19 10:17:00) [30]>где волшебные английские буквы ошибки?
"Недостаточно памяти для обработки команды"
нет их у меня.... Делфи 2010...
sniknik (2010-12-19 10:15:00) [31]> Сори исправился.
ихгде? где понятный код? где волшебные английские буквы ошибки?
> в формате пнг есть сжатие какое-то
сжатие делается готового, всегда, внутрь архива в уже архивированном виде ничего не вставляется. почитай про "какое-то сжатие", принципы архивирования.
Oleg_teacher (2010-12-19 10:09:00) [32]
> почему тогда операция и над j? это уже не последовательно,
> это диагональ.
не ето в двойном цыкле ето прямоугольно заполняется...то есть сначала все в первую строку... потом во вторую...и т.д.
> Image1.Canvas.Draw(i-*256,j-*256,png);
ето вырвано из проги, часть удалил
Image1.Canvas.Draw((i-StrToIntDef(Edit2.Text,0))*256,(j-StrToIntDef(Edit4.Text,0))*256,png);
> если пиксель = байту, для простоты. т.е. 61 гигабайт примерно.
>
> а у тебя сколько оперативки?
Так вот собственно в етом и проблемы... если на битмапе рисовать то по сути согласен. Но если бы сразу на пнг как то...в формате пнг есть сжатие какое-то, потому что размер рисунка намного меньше.
> не нужно переводов, интерпретаций, и т.д. собственных рассуждений
> вместо нее и т.д., ошибку ты должен скопировать буква в
> букву, посимвольно.
Сори исправился.
sniknik (2010-12-19 09:58:00) [33]> то есть разместить их последовательно
> Image1.Canvas.Draw(i-*256,j-*256,png);
почему тогда операция и над j? это уже не последовательно, это диагональ.
т.е. размер картинки получается 1000*256 на 1000*256 итого 65 536 000 000 байт, если пиксель = байту, для простоты. т.е. 61 гигабайт примерно.
а у тебя сколько оперативки?
+
что это за операция i -*256? это со скидкой на постоянное "у меня все правильно просто здесь опечатался"... решил что там умножение, а на самом деле? может в 2010 что то другое (например факториал) означает, ыыы?
> просто она сказана в моем вопросе.
не нужно переводов, интерпретаций, и т.д. собственных рассуждений вместо нее и т.д., ошибку ты должен скопировать буква в букву, посимвольно. также как и код. а то обсуждается постоянно одно, а в реальности совсем другое.
ССЗБ
Oleg_teacher (2010-12-19 09:18:00) [34]
> Дмитрий Белькевич (18.12.10 00:29) [1]
>
> Ошибка, конечно же, секретная...
>
не))) не секретная.... просто она сказана в моем вопросе.
"Недостаточно памяти для обработки команды"
Oleg_teacher (2010-12-19 09:15:00) [35]хм, у меня просто не получается рисовать на канве pngimage.
"canvas does not allow drawing"
png,bed:TPngImage;
s:=...
png.LoadFromFile(s);
bed.Canvas.Draw(0, 0, png);
А если рисовать на битмапе.. то я думаю разницы в памяти с простым Image1 не будет, так как файлов много и создать большой рисунок не получится.
MonoLife (2010-12-19 07:50:00) [36]
> Почему сейчас использую....потому что могу на имаге рисовать.
>
Почему нельзя "рисовать" на канве битмэпа или том же pngimage?
Германн (2010-12-19 02:22:00) [37]
> а как так сделать. Пока не понимаю.
Спросить у antonn ©
Пусть раскошеливается :)
Oleg_teacher (2010-12-19 01:36:00) [38]
> Совершенно не нужно держать такое количество в памяти, необходимо
> напрямую работать с файлом.
а как так сделать. Пока не понимаю.
Почему сейчас использую....потому что могу на имаге рисовать. а рисую на етом имаге каждый пнг файл. Если подскажите как напрямую работать с етим файлом буду признателен.
Германн (2010-12-18 02:33:00) [39]
> antonn © (18.12.10 02:27) [3]
>
> потому что это png...
>
О! Ну и почему?
Или ты свой потенциал(знания) по работе с графикой принципиально выдаешь только на винграде?
antonn (2010-12-18 02:27:00) [40]потому что это png...