![]() |
| ||
|
|
Новости |
Поиск |
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 файлов то віходит за рамки памяти наверное так как пишет ошибку. Как с етим поборотся...что можете предложить?
Студент (2011-01-09 07:15:00) [1]
> sniknik © (19.12.10 15:52) [27]
Всё открывается... Подвисает слегка из-за размеров, но всё нормально... Возможно у вас просто левый PNGImage?
> Oleg_teacher (19.12.10 13:32) [22]
Неправильный код... Создайте TBitmap (можно прям в Image) и на него рисуйте всё...
Плохиш (2010-12-21 14:21:00) [2]А я так и не смог прочитать вопросов аффтара, т.к. коверкование языка вызывает отвращение.
эквалайзер (2010-12-21 09:50:00) [3]
> KilkennyCat © (20.12.10 18:14) [37]
> это круто. но вот у
> меня твой код такой ошибки не вызовет.
Я тоже могу сказать, что у меня 35 см в длину и 12 в толщину, но я никому не покажу.
antonn (2010-12-20 20:25:00) [4]ну я не про такие огромные говорю, но png точно видел - они редактируются в любом (более-менее навороченном) редакторе и достаточно компактны чтобы выкладывать их в интернете "как есть" без архивов.
sniknik (2010-12-20 19:58:00) [5]> в игрострое часто кадры анимации и текстуры в одну сливают, для "внутреннего использования"
и это в PNG? видел битмапы, небольшие, типа список иконок, вроде даже такой специальный формат есть, анимацию в gif тоже видел (avi сам Гейтс велел)... а вот PNG (по сути архив), да еще таких глобальных масштабов... не видел.
ан же не адресуется до полного разворачивания. т.к. нужный кадр выцепить это весь рисунок разворачивать. где удобство? или "внутри невидно"?
KilkennyCat (2010-12-20 18:14:00) [6]
> эквалайзер (20.12.10 13:58) [35]
это круто. но вот у меня твой код такой ошибки не вызовет.
antonn (2010-12-20 16:50:00) [7]
> я собственно хотел донести другую мысль... если ничем не
> посмотреть то НАФИГ ТАКИЕ КАРТИНКИ?
в игрострое часто кадры анимации и текстуры в одну сливают, для "внутреннего использования"
эквалайзер (2010-12-20 13:58:00) [8]
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
---------------------------
KilkennyCat (2010-12-19 22:42:00) [9]
> от элементарного незнания
не, незнание - это нормально. Невозможно же знать все сразу. А вот неумение (нежелание) думать, перед тем как делать, находить оптимальные и логичные решения... Неправильная методика образования. Берем книжку "Язык такой-то для начинающих". Вместо алгоритмистики - батонокидательство.
> Oleg_teacher
пересмотри алгоритм. определись с конкретной целью и найди оптимальное решение. Не ищи кажущихся элементарными и легкими, как например использование визуальных компонент думая, что они особо не отличаются. Ты ведь не знаешь еще механизмов, как ты можешь быть уверен, что TImage ненамного отличается от TBitMap? Я вот совершенно не уверен, что там не происходит попытка отрисовать всю картинку, а не только видимой части, а это уже хрен знает сколько ресурсов съедается.
sniknik (2010-12-19 20:31:00) [10]> ну мож потом оно так же кусочно выдергивается для просмотра
список/архив можно без сжатия/база/таблица, и выдергивать не надо, просто берешь нужное, + описание будет где держать + сохранять/читать не напрягаясь, + изменения/вставки с минимальными усилиями.
> и по какой-то неведомой прихоти хранение именно так.
от элементарного незнания и страсти к "велосипедоизобретательству".
KilkennyCat (2010-12-19 19:23:00) [11]
> sniknik © (19.12.10 16:53) [29]
>
> если ничем не посмотреть то НАФИГ ТАКИЕ КАРТИНКИ?
ну мож потом оно так же кусочно выдергивается для просмотра, и по какой-то неведомой прихоти хранение именно так.
Oleg_teacher (2010-12-19 18:26:00) [12]
> ужасный код, и бесполезный, никому не интересны твои EditXXX.
> Text -ы,
согласен, все ети данные можно было вынести в переменные перед цыклом.
знаю, что все мои едиты никому не интересны, поетому в начале и не выносил весь етот код.
Суть постановки проблемы уже понял с Вашей помощью....
> НАФИГ ТАКИЕ КАРТИНКИ?
чето недопонял дальнозоркость етого вопроса, так как создать такой обьем не получалось.
попробовал заменить
PWIDHT = 256*300;
PHEIGHT = 4*256;
вот и вылезла все та же у меня ошибка.
> Но мысль, надеюсь, понятна автору, использовать визуальный
> контрол совсем не обязательно.
мысль не понял, необязательно но можно же? Ето только же будет влиять на визуальное отображение окончательного рисунка. битмап же когда мы создаем и когда етот битмап на Image1 отображается всеравно не влазит в память оперативную.
MonoLife (2010-12-19 17:08:00) [13]
> если ничем не посмотреть то НАФИГ ТАКИЕ КАРТИНКИ?
с этим трудно не согласиться)
sniknik (2010-12-19 16:53:00) [14]> использовать визуальный контрол совсем не обязательно.
я собственно хотел донести другую мысль... если ничем не посмотреть то НАФИГ ТАКИЕ КАРТИНКИ?
MonoLife (2010-12-19 16:38:00) [15]
sniknik © (19.12.10 15:52) [27]
> png:= TPNGObject.Create;
очевидно, что TPngImage это не TPNGObject, иначе автор использовал бы его канву, тогда бы и битмэп не нужен был...
Но мысль, надеюсь, понятна автору, использовать визуальный контрол совсем не обязательно.
sniknik (2010-12-19 15:52:00) [16]> я даже непонимал что вы хотите увидеть весь мой код.
не сумлевайси, народ любит ужастики. сразу давай!
ужасный код, и бесполезный, никому не интересны твои 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] картинок (места под них) работает. другое дело ничем не открывается (паинт. паинт.нет, просмотрщик винды, икснвиев... ничем в общем), и зачем тогда такие картинки?
Oleg_teacher (2010-12-19 15:07:00) [17]
> И вообще, в Вашем случае я бы работал только с bmp и лишь
> конечный результат сжимал в что-либо.
так я и можно сказать работаю так...вы не поняли сути... если много файлов которые надо обьеденить, тогда вылазит ошибка о невозможности ето сделать так как недостаточно памяти (а ето все происходит потому что работаю с битмапом). Почему использую пнг? да потому что файлы у меня пнгшные)) и в етом весь смысл пока. Хот потом я думал если рисовать сразу на пнг, тогда может и общий рисунок будет небольшой... да вот не тут то было.
KilkennyCat (2010-12-19 14:56:00) [18]не знаю, где читать... пнг, помимо сжатия, имеет альфа-канал, т.е. можно работать с прозрачностью.
Если это не нужно, то и смысла использовать нет.
И вообще, в Вашем случае я бы работал только с bmp и лишь конечный результат сжимал в что-либо.
Oleg_teacher (2010-12-19 14:51:00) [19]
> а вот я подозревал, что никакие прелести пнг не используются.
> ..
а где бы почитать о етих прелестях... так как использую пнг (TPngImage) только для того чтобы загрузить изображние. В посте 8 написал что не могу почему то рисовать на пнг.
KilkennyCat (2010-12-19 14:46:00) [20]а вот я подозревал, что никакие прелести пнг не используются...