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

Вниз

PNG+Delphi   Найти похожие ветки 

 
Oleg_teacher   (2010-12-17 21:07) [0]

Надо обьеденить 100 картинок пнг (то есть разместить их последовательно сотворив при етом 1 полотно (файл)). Использую..TPngImage делфи 2010.
В связке с Image1.Canvas.Draw:
Image1.Canvas.Draw(i-*256,j-*256,png); все на маленьких количествах получается... но когда хочу обьеденить 1000 файлов то віходит за рамки памяти наверное так как пишет ошибку. Как с етим поборотся...что можете предложить?


 
Дмитрий Белькевич   (2010-12-18 00:29) [1]

Ошибка, конечно же, секретная...


 
KilkennyCat ©   (2010-12-18 00:51) [2]

Совершенно не нужно держать такое количество в памяти, необходимо напрямую работать с файлом. И зачем имэйдж? Потому что там есть SaveToFile?


 
antonn ©   (2010-12-18 02:27) [3]

потому что это png...


 
Германн ©   (2010-12-18 02:33) [4]


> antonn ©   (18.12.10 02:27) [3]
>
> потому что это png...
>

О! Ну и почему?
Или ты свой потенциал(знания) по работе с графикой принципиально выдаешь только на винграде?


 
Oleg_teacher   (2010-12-19 01:36) [5]


> Совершенно не нужно держать такое количество в памяти, необходимо
> напрямую работать с файлом.

а как так сделать. Пока не понимаю.
Почему сейчас использую....потому что могу на имаге рисовать. а рисую на етом имаге каждый пнг файл. Если подскажите как напрямую работать с етим файлом буду признателен.


 
Германн ©   (2010-12-19 02:22) [6]


> а как так сделать. Пока не понимаю.

Спросить у antonn ©
Пусть раскошеливается :)


 
MonoLife ©   (2010-12-19 07:50) [7]


> Почему сейчас использую....потому что могу на имаге рисовать.
>  

Почему нельзя "рисовать" на канве битмэпа или том же pngimage?


 
Oleg_teacher   (2010-12-19 09:15) [8]

хм, у меня просто не получается рисовать на канве pngimage.
"canvas does not allow drawing"

png,bed:TPngImage;
s:=...
png.LoadFromFile(s);
bed.Canvas.Draw(0, 0, png);

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


 
Oleg_teacher   (2010-12-19 09:18) [9]


> Дмитрий Белькевич   (18.12.10 00:29) [1]
>
> Ошибка, конечно же, секретная...
>

не))) не секретная.... просто она сказана в моем вопросе.
"Недостаточно памяти для обработки команды"


 
sniknik ©   (2010-12-19 09:58) [10]

> то есть разместить их последовательно
> 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 10:09) [11]


> почему тогда операция и над 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 10:15) [12]

> Сори исправился.
ихгде? где понятный код? где волшебные английские буквы ошибки?

> в формате пнг есть сжатие какое-то
сжатие делается готового, всегда, внутрь архива в уже архивированном виде ничего не вставляется. почитай про "какое-то сжатие", принципы архивирования.


 
Oleg_teacher   (2010-12-19 10:17) [13]

>где волшебные английские буквы ошибки?
"Недостаточно памяти для обработки команды"
нет их у меня.... Делфи 2010...


 
Oleg_teacher   (2010-12-19 10:19) [14]


> в уже архивированном виде ничего не вставляется. почитай
> про "какое-то сжатие", принципы архивирования.

не согласен.... к архивному виду можно добавить.... при етом не обязательно все розархивировать.


 
sniknik ©   (2010-12-19 10:29) [15]

> к архивному виду можно добавить.... при етом не обязательно все розархивировать.
ну попробуй, сделай в например rar большой "непрерывный архив" (чтобы не делало блоков по файлам, куда можно "втиснуться", т.е. приблизить к однофайловому варианту, как и рисунок в png). большой это где то гиг, чтобы было очевидно. после добавь к нему файл, и аналогично тот же файл заархивируй одиночно. сравни время. время "голого" архивирования совпало с временем добавления? тогда сорри я не прав.

не путай программную реализацию и алгоритм. программная для пользователя, если ты пользователь, то бросай программировать.


 
sniknik ©   (2010-12-19 10:38) [16]

по другому вариант, если не понятно с непрерывным, берешь 1 большой текстовый файл, архивируешь и ищешь в архиваторе функцию "изменить без разархивирования". как найдешь скажешь. ну или сделай архив другого файла, после из готового архива вырежи определенный кусок текста (в архивированном виде естественно) и вставь/добавь его в первый... получилось?


 
Oleg_teacher   (2010-12-19 10:40) [17]

>архивирования совпало с временем добавления?
уверен что не совпадет.

> не путай программную реализацию и алгоритм. программная
> для пользователя, если ты пользователь, то бросай программировать.
>

отличная помощь. Спасибо вам огромное.

П.С. Для других пользователей форума.... Вопрос еще не закрыт.


 
Oleg_teacher   (2010-12-19 10:46) [18]


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

ето все я реально почему то считаю пока пустой болтовней.... если вы хотите сказать что ето невозможно сделать... так и скажите, а потом начну спрашивать почему не возможно...
По сути с файлом ход ваших мыслей понятен... но вы для меня плохо пример приводите... так как все что вы написали я могу назвать редактированием, но не добавлением, а ето разные понятия (ну я пока так думал, может и ошибаюсь).....


 
sniknik ©   (2010-12-19 11:16) [19]

> если вы хотите сказать что ето невозможно сделать...
я хочу сказать, что твое понимание ситуации невозможно - работа внутри архивов без раз архивации, а вот реальность еще не определена... т.к. до сих пор нет понятного кода и конкретных цифр. (1000 файлов из [0] это всего 62 мегабайта, что имхо вполне реально, но дальнейшее и действия наводят на мысль о попытке втиснуть 1000*1000 файлов, если не по количеству так по распределению в общей картинке, что уже нереально)

> так как все что вы написали я могу назвать редактированием, но не добавлением
добавлением можно считать добавление файла в не непрерывный архив, там где у файла собственный заголовок (таблица кодирования... смутно помню, на 4м курсе изучали), т.е. там где архив составляет собой фактически список мини архивов.
в переводе на картинки, ты тоже можешь, и легко, составить список из отдельных  png.
но ты то пытаешься втиснуть все в один, а это непрерывный/или 1 файл.


 
Oleg_teacher   (2010-12-19 11:22) [20]

ок. спасибо большое за разъяснение...
Суть такая что задача для малых входных данных реализовано,но для больших нет...
Если некому ничего добавить, тогда вопрос снят.


 
sniknik ©   (2010-12-19 11:45) [21]

> Суть такая что задача для малых входных данных реализовано,но для больших нет...
суть такая, что машина по дорогам ездит, а то трассам нет...
и что это добавило?  

> Если некому ничего добавить, тогда вопрос снят.
партизаны не сдаются! что угодно, лишь бы свой набор глюков называемый кодом не показывать...


 
Oleg_teacher   (2010-12-19 13:32) [22]

хм... я даже непонимал что вы хотите увидеть весь мой код. Частями основное я вроде давал.
ок...
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;


 
KilkennyCat ©   (2010-12-19 14:46) [23]

а вот я подозревал, что никакие прелести пнг не используются...


 
Oleg_teacher   (2010-12-19 14:51) [24]


> а вот я подозревал, что никакие прелести пнг не используются.
> ..

а где бы почитать о етих прелестях... так как использую пнг (TPngImage) только для того чтобы загрузить изображние.  В посте 8 написал что не могу почему то рисовать на пнг.


 
KilkennyCat ©   (2010-12-19 14:56) [25]

не знаю, где читать... пнг, помимо сжатия, имеет альфа-канал, т.е. можно работать с прозрачностью.
Если это не нужно, то и смысла использовать нет.
И вообще, в Вашем случае я бы работал только с bmp и лишь конечный результат сжимал в что-либо.


 
Oleg_teacher   (2010-12-19 15:07) [26]


> И вообще, в Вашем случае я бы работал только с bmp и лишь
> конечный результат сжимал в что-либо.

так я и можно сказать работаю так...вы не поняли сути... если много файлов которые надо обьеденить, тогда вылазит ошибка о невозможности ето сделать так как недостаточно памяти (а ето все происходит потому что работаю с битмапом). Почему использую пнг? да потому что файлы у меня пнгшные)) и в етом весь смысл пока. Хот потом я думал если рисовать сразу на пнг, тогда может и общий рисунок будет небольшой... да вот не тут то было.


 
sniknik ©   (2010-12-19 15:52) [27]

> я даже непонимал что вы хотите увидеть весь мой код.
не сумлевайси, народ любит ужастики. сразу давай!

ужасный код, и бесполезный, никому не интересны твои EditXXX.Text -ы, неужели нельзя писать нормально, опредльть переменную преобразовать 1 раз, вне цикла/передать в параметрах, и главное когда даешь код говорить, что за значения в них...

сделал проверку сам
procedure TForm1.Button1Click(Sender: TObject);
const
 PWIDHT  = 256*1000;
 PHEIGHT = 256;
var
 png: TPNGObject;
 img: TBitmap;
begin
 img:= TBitmap.Create;
 try
   img.Width := PWIDHT;
   img.Height:= PHEIGHT;
   img.Canvas.Pen.Color:= clRed;
   img.Canvas.MoveTo(1, 1);
   img.Canvas.LineTo(PWIDHT-1, PHEIGHT-1);

   png:= TPNGObject.Create;
   try
     png.Assign(img);
     png.SaveToFile("D:\test.png");
   finally
     png.Free;
   end;

 finally
   img.Free;
 end;
end;

это с 1000 заказанных в [0] картинок (места под них) работает. другое дело ничем не открывается (паинт. паинт.нет, просмотрщик винды, икснвиев... ничем в общем), и зачем тогда такие картинки?


 
MonoLife ©   (2010-12-19 16:38) [28]


sniknik ©   (19.12.10 15:52) [27]
> png:= TPNGObject.Create;

очевидно, что TPngImage это не TPNGObject, иначе автор использовал бы его канву, тогда бы и битмэп не нужен был...
Но мысль, надеюсь, понятна автору, использовать визуальный контрол совсем не обязательно.


 
sniknik ©   (2010-12-19 16:53) [29]

> использовать визуальный контрол совсем не обязательно.
я собственно хотел донести другую мысль... если ничем не посмотреть то НАФИГ ТАКИЕ КАРТИНКИ?


 
MonoLife ©   (2010-12-19 17:08) [30]


> если ничем не посмотреть то НАФИГ ТАКИЕ КАРТИНКИ?

с этим трудно не согласиться)


 
Oleg_teacher   (2010-12-19 18:26) [31]


> ужасный код, и бесполезный, никому не интересны твои EditXXX.
> Text -ы,

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

> НАФИГ ТАКИЕ КАРТИНКИ?

чето недопонял дальнозоркость  етого вопроса, так как создать такой обьем не получалось.
попробовал заменить  
PWIDHT  = 256*300;
PHEIGHT = 4*256;
вот и вылезла все та же у меня ошибка.

> Но мысль, надеюсь, понятна автору, использовать визуальный
> контрол совсем не обязательно.

мысль не понял, необязательно но можно же? Ето только же будет влиять на визуальное отображение окончательного рисунка. битмап же когда мы создаем и когда етот битмап на Image1 отображается всеравно не влазит в память оперативную.


 
KilkennyCat ©   (2010-12-19 19:23) [32]


>  sniknik ©   (19.12.10 16:53) [29]
>
>  если ничем не посмотреть то НАФИГ ТАКИЕ КАРТИНКИ?

ну мож потом оно так же кусочно выдергивается для просмотра, и по какой-то неведомой прихоти хранение именно так.


 
sniknik ©   (2010-12-19 20:31) [33]

> ну мож потом оно так же кусочно выдергивается для просмотра
список/архив можно без сжатия/база/таблица, и выдергивать не надо, просто берешь нужное, + описание будет где держать + сохранять/читать не напрягаясь, + изменения/вставки с минимальными усилиями.

> и по какой-то неведомой прихоти хранение именно так.
от элементарного незнания и страсти к "велосипедоизобретательству".


 
KilkennyCat ©   (2010-12-19 22:42) [34]


> от элементарного незнания

не, незнание -  это нормально. Невозможно же знать все сразу. А вот неумение (нежелание) думать, перед тем как делать, находить оптимальные и логичные решения...  Неправильная методика образования. Берем книжку "Язык такой-то для начинающих". Вместо алгоритмистики - батонокидательство.


> Oleg_teacher

пересмотри алгоритм. определись с конкретной целью и найди оптимальное решение. Не ищи кажущихся элементарными и легкими, как например использование визуальных компонент думая, что они особо не отличаются. Ты ведь не знаешь еще механизмов, как ты можешь быть уверен, что TImage ненамного отличается от TBitMap? Я вот совершенно не уверен, что там не происходит попытка отрисовать всю картинку, а не только видимой части, а это уже хрен знает сколько ресурсов съедается.


 
эквалайзер   (2010-12-20 13:58) [35]

procedure TForm1.Button1Click(Sender: TObject);
var
 Png: TPngImage;
begin
 Png := TPngImage.CreateBlank(COLOR_RGBALPHA, 16, 256*100, 256*100);
 try
   Png.SaveToFile("aaa.png");
 finally
   Png.Free;
 end;
end;


---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOutOfMemory with message "Out of memory".
---------------------------
Break   Continue   Help  
---------------------------


 
antonn ©   (2010-12-20 16:50) [36]


> я собственно хотел донести другую мысль... если ничем не
> посмотреть то НАФИГ ТАКИЕ КАРТИНКИ?

в игрострое часто кадры анимации и текстуры в одну сливают, для "внутреннего использования"


 
KilkennyCat ©   (2010-12-20 18:14) [37]


> эквалайзер   (20.12.10 13:58) [35]

это круто. но вот у меня твой код такой ошибки не вызовет.


 
sniknik ©   (2010-12-20 19:58) [38]

> в игрострое часто кадры анимации и текстуры в одну сливают, для "внутреннего использования"
и это в PNG? видел битмапы, небольшие, типа список иконок, вроде даже такой специальный формат есть, анимацию в gif тоже видел (avi сам Гейтс велел)... а вот PNG (по сути архив), да еще таких глобальных масштабов... не видел.
ан же не адресуется до полного разворачивания. т.к. нужный кадр выцепить это весь рисунок разворачивать. где удобство? или "внутри невидно"?


 
antonn ©   (2010-12-20 20:25) [39]

ну я не про такие огромные говорю, но png точно видел - они редактируются в любом (более-менее навороченном) редакторе и достаточно компактны чтобы выкладывать их в интернете "как есть" без архивов.


 
эквалайзер   (2010-12-21 09:50) [40]


> KilkennyCat ©   (20.12.10 18:14) [37]
> это круто. но вот у
> меня твой код такой ошибки не вызовет.

Я тоже могу сказать, что у меня 35 см в длину и 12 в толщину, но я никому не покажу.



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

Форум: "Начинающим";
Текущий архив: 2011.04.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.004 c
2-1294187314
RUu
2011-01-05 03:28
2011.04.03
работа с popupmenu в runtime


9-1188577004
max_
2007-08-31 20:16
2011.04.03
Нужна помощь


2-1293312319
makarik01
2010-12-26 00:25
2011.04.03
delphi 7 и win7


2-1294509433
Fr
2011-01-08 20:57
2011.04.03
символы разных шрифтов в ячейке StringGrid


2-1294309152
young_and_strong
2011-01-06 13:19
2011.04.03
zipforge





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский