PDA

Просмотр полной версии : размеры загруженного jpg?


Pogreb
26.02.2004, 12:57
кто то же должен знать?
В динамически созданный клип
загружаем jpg и
проверяем размеры клипа
myClip._width, myClip._height
!! они не изменились. == 0

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

но это же извращение!

У меня 50 картинок - представьте размер XML файла.

на Вас последняя надежда.

Nox Noctis
26.02.2004, 13:04
до тех пор пока картинка не загрузится полностью - нельзя определить ее габариты.

точка.

сначала проверяешь что всё загрузилось, потом только спрашиваешь ширину и высоту клипа

Pogreb
26.02.2004, 14:10
Все тот же вопрос:

допустим картинка загрузилась полностью.

А как обратится к ней, что бы узнать ее размер?

сам файл для загрузки называется image.jpg,
загружается в клип myClip.

И как же узнать ее свойства?

_root.myClip.image._width ?

или

_root.myClip._width ?

И как узнать под каким именем находится картинка в клипе,
И загруженые картинки становятся клипами?

Nox Noctis
26.02.2004, 14:17
при загрузке чего-то в клип, ты просто заменяешь все содержимое контейнера с каким-то именем на другое. картинка это или свфка - не важно. имя грузимого файла не играет дальше никакой роли. есть только имя клипа, содержащего загруженный объект.

Iv
27.02.2004, 06:48
маленькое добавление:
размеры картинки будут доступны только в следующем, после загрузки, кадре.

Nox Noctis
27.02.2004, 07:40
Оригинал написал(а) BitSky
маленькое добавление:
размеры картинки будут доступны только в следующем, после загрузки, кадре. ээ... не правда :)
эти свойства будут доступну в том кадре, в котором getBytesTotal станет равным getBytesLoaded...

не так и важно когда там картинка загрузилась (загрузка ведь процесс асинхронный фреймрейту) - главное что как только getBytesTotal == getBytesLoaded, так сразу можно пользоваться высотой и шириной картинки.

Iv
27.02.2004, 08:06
ты бы проверял, прежде чем обвинять меня во лжи %)
- истинно глаголю:

this.createEmptyMovieClip("mc", 0);
this.mc.loadMovie("pic.JPG");
this.onEnterFrame = function() {
if (this.mc.getBytesLoaded() == this.mc.getBytesTotal()) {
trace(this.mc._width);
delete this.onEnterFrame;
}
};

Nox Noctis
27.02.2004, 08:21
АХА ! попался ! :))

в этом коде ноль равен нулю, потому что загрузка еще НЕ НАЧАЛАСЬ :) то есть ты сравниваешь количества байт исходного (в данном случае пустого) мувика друг с другом и удаляешь ентерФрейм с чистой совестью, хотя загрузка-то еще даже не началась :)

если не веришь - сделай трейс того что происходит при загрузке не удаляя онЕнтерФрейм по "окончании"... увидишь что первым всегда трейсятся исходные байты, еще без учёта загрузки.

зы: а я проверил :) хотя и был уверен... но на всякий пожарный...

Штрек
27.02.2004, 08:39
Всё хотел спросить
loadMovie("test.jpg", _root.mc);
_root.mc.onEnterFrame = function() {
trace("Оп");
};
Т.е. на мувике в который грузим onEnterFrame срабатывает
один раз, а onData вообще не фурычит?

Iv
27.02.2004, 08:41
хм...
весьма странно.. и интересненько..
и дело даже не в том, чем это кончается, а в том, что загрузка еще не началась....
onEnterFrame задаем в том же кадре, что и даем команду на загрузку, и та и другая должны начать исполняться одновременно. почему же этого фактически не происходит?
хм.. чешу репу.

Iv
27.02.2004, 08:54
2Штрек
- сносится всё.

Штрек
27.02.2004, 08:54
Оригинал написал(а) Nox Noctis
АХА ! попался ! :))

в этом коде ноль равен нулю, потому что загрузка еще НЕ НАЧАЛАСЬ :)

Как же не началась, когда с реальным джипегом трейсится реальная ширина. :confused:

Nox Noctis
27.02.2004, 08:54
2BitSky
я давно этим пользуюсь, но как-то не задумывался над теорией... у мня несколько удивило что ты на эти грабли не наступал еще.. :)

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

это странно, да..

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

думаю что отгадать как там это на самом деле - нереально.. это в архитектуре плеера глубоко

Nox Noctis
27.02.2004, 09:09
Оригинал написал(а) Штрек
когда с реальным джипегом трейсится реальная ширина.this.createTextField("TF", 2, 0,0,0,0)
TF._width = Stage.width
TF._height = Stage.height
TF.multiline = true
TF.autoSize = true
TF.textColor = 0xff6600
TF.text = "loading started";
//
this.createEmptyMovieClip("img", 1)
img._x = Stage.width/2
img._y = Stage.height/2
img.loadMovie("BLABLABLA.jpg");
frames = 1;
this.onEnterFrame = function() {
var l = img.getBytesLoaded();
var t = img.getBytesTotal();
//
var neo = "\n "+frames++;
neo += " : "+"l["+l+"] t["+t+"]";
neo += " __ w["+img._width+"] h["+img._height+"]";
//
TF.text += neo;
TF.scroll = TF.maxscroll;
//
if (l && t && l>=t) {
TF.text += "\nloading finished";
delete this.onEnterFrame;
}
};посмотри что выводится... высота и ширина определяются только по окончании загрузки.

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

1. делаем новый мувик под шестёрку.
2. в нём пишем вышеприведённый код
3. паблишим под шестёрку, но проигрываем в редакторе МХ2004

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

из редактора шестерки этот баг никогда не наблюдался, и при запуске в сети/из стандалоунового плеера тоже нет..

Штрек
27.02.2004, 09:15
Оригинал написал(а) Pogreb
потом я делаю из этого клипа -
кнопку по размеру загруженой картинки:
. .
А зачем тебе для кнопки размер?
Что сам мувик не может стать кнопкой?
Раз там при загрузке все обработчики сносит,
ставь обработчики, типа onRollOver когда отработает прелоад.

Штрек
27.02.2004, 09:27
В этом коде
this.createEmptyMovieClip("mc", 0);
this.mc.loadMovie("pic.JPG");
this.onEnterFrame = function() {
if (this.mc.getBytesLoaded() == this.mc.getBytesTotal()) {
trace(this.mc._width);
delete this.onEnterFrame;
}
};
если грузить реальную картинку, трейсится
РЕАЛЬНАЯ ширина, а раз так, то не 0==0,
а реальн.загрузка == весу джипега.
Вот на это я и просил обратить внимание. ;)

Iv
27.02.2004, 09:38
обратили уже

Pogreb
27.02.2004, 10:55
всем, всем, всем!
Спасибо Вам огромное, что ответили на мой вопрос.
Я, действительно проверял размер картинки не проверяя ее загрузки, а просто в следующей строке.

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

Ипосле этого я сразуже написал
this.onEnterFrame() =function{

if (mc_img._width!=0){run();}
}

Pogreb
27.02.2004, 11:15
... т.е.
если ширина клипа, в который загружается картинка
не равна нулю, то значит картинка загрузилась.

А вообще я скажу зачем мне все это надо было:

Я делаю прокручивающийся список иконок(jpg),
нажимая на которые можно будет загружать большие
картинки.
Этот список строется динамически:
Компонент открывает XML, где перечислены названия файлов (jpg),
и описания к большим картинам,
определяет колличество, загружает иконки в специальный клип - контейнер, выстраивает иконки вряд, делает из них кнопки, и подписывает их.
Затем рисует и применяет к контейнеру маску, определенной фомы и наконец позволяет их прокручивать в контейнере.

Расположение контейнера он берет у заранее нарисованного
на сцене квадратика - клипа.

Если размеры какой нибудь конки изменились, то он мгновенно
сдваигает все остальные картинки.

Вот для этого и нужно мне было знать размеры загружаемых иконок.
Всего доброго Всем!

Nox Noctis
27.02.2004, 11:36
Оригинал написал(а) Штрек
если грузить реальную картинку, трейсится
РЕАЛЬНАЯ ширина, а раз так, то не 0==0,
а реальн.загрузка == весу джипега.
Вот на это я и просил обратить внимание. ;)
че-та я не понимаю о чем речь :) при чем тут реальные размеры картинки ? :) это ДО того как ее погрузили - будет ноль равен нулю. в этом коде. и trace(this.mc._width); выдаст текущий размер клипа (у нас он пустой - а мог быть чем-то заполненный)

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

Iv
27.02.2004, 14:42
2Pogreb: http://www.dembicki.narod.ru/tutor/albom.zip