Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   почему картинка BitmapData отображается черным прямоугольником? (http://www.flasher.ru/forum/showthread.php?t=96164)

Micar 24.05.2007 19:52

почему картинка BitmapData отображается черным прямоугольником?
 
Картинки подгружаются с сервера, их названия берутся из XML
потом под onLoadInit они отрисовываются битмапом draw и заменяются - для лучшего сглаживания

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

А фишка в том, что происходит это далеко не на всех компах, а только на тех, которым только что поставили новый флеш плеер, версии 9.0.45.0
а до этого они были девственны, плеера на них никакого не было.
Остальные компы все отображают нормально, причем и на прозрачность (true false) им плевать - отрисовывают свой квадратик растра так, как надо.

от чего могут быть такие черные прямоугольники вообще?

битмап делается примерно так:
Код:

//подмена изображения и удаление оригинала
function changeImg(mc:MovieClip):Void{               

//создаем прозрачный BitmapData с шириной и высотой картинки
var tmpBmp:BitmapData = new BitmapData (mc._width, mc._height, false, 0);
var _bmp:MovieClip = mc._parent.imgBmp; //находим MovieClip, куда будет вставлена картинка
tmpBmp.draw(mc); //отрисовываем MovieClip, в котором содержиться картинка
_bmp.attachBitmap(tmpBmp, 0, "auto", true); //помещаем внутрь MovieClip

mc._parent.createEmptyMovieClip("ki", 909);
mc.swapDepths(mc._parent.ki);
mc.removeMovieClip(); //удаляем оригинал

}


screamge 24.05.2007 19:54

Код:

(mc._width, mc._height, false, 0x00);
Вообще должно быть так, попробуйте...чесно говоря я остальной код не читал

Micar 24.05.2007 20:27

Спасибо, но, увы, не помогает :(

а на ливДоке пишут, что BitmapData у некоторых так печтатается - черными квадратами...

vapes 24.05.2007 20:58

Скорей всего ты делаеш draw до того, как загрузицца картинка, если она у тебя не встроенная, а подгружаецца.

iNils 24.05.2007 21:20

Цитата:

Код:

//создаем прозрачный BitmapData с шириной и высотой картинки
var tmpBmp:BitmapData = new BitmapData (mc._width, mc._height, false, 0);


Прозрачный BitmapData делается с помощью true, а не false.

Micar 24.05.2007 21:48

Цитата:

Прозрачный BitmapData делается с помощью true, а не false.
да, это верно - зарапортовалась уже с этой проблемой :)
прошу прощения.

и все же - от чего бы bitmapData мог оборачиваться черными квадратами? да еще и не на всех машинах?

+++++

собственно проблема - если оно true (прозрачное) - то все картинки прозрачные, т.е. их не видно,
а если оно false - то картинки становятся черными квадратами.
Отчего вообще битмап может стать черным квадратом? он считает, что его залили черным? или не работает опция draw (не отрисовывается) ?

может, я неправильно экспортирую класс?

Код:

import mx.utils.Delegate;
import flash.display.BitmapData;


iNils 24.05.2007 21:59

Если false сменить на true, то у меня все прозрачное

Micar 24.05.2007 22:01

Цитата:

Скорей всего ты делаеш draw до того, как загрузицца картинка, если она у тебя не встроенная, а подгружаецца.
спасибо!

делаю в лоадИнит
Код:

imgList.onLoadInit = Delegate.create(this, changeImg); //замена картинок
завтра попробую проверить, может, вставить туда ф-цию по-простому? - увы, тестировать можно только на одном компе, остальные видят все как миленькие

screamge 24.05.2007 22:05

Вообще об этом несоответвии в документацией можно почитать в подписе iNils - a.

з.ы. я сейчас вожусь с переводом доков по битмап, может iNils ты к себе разместишь то что не переведенно?

Micar 24.05.2007 22:08

Цитата:

Если false сменить на true, то у меня все прозрачное
ну, моя проблема в том, что они становятся прозрачными ЦЕЛИКОМ - вся фотография, т.е. ее не видно, а нажимать на нее можно и открывает она то, что надо.


а если выставить false То они целиком же черные.


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


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


+++++++

кстати о несоответствии прочла именно у iNils-a - за что спасибо, равно как и за перевод!

screamge 24.05.2007 22:15

Кстати я заметил несоответвие отображения битмапы в разных браузерах, я как-то писал об этом, а вообще это малосвязанно с версией, во всякомслучае я такое незамечал.

з.ы. Девушка разбирающаяся в Битмапе...о_О))

Micar 24.05.2007 22:20

за девушку спасибо :-/

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

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

screamge 24.05.2007 22:25

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

Micar 24.05.2007 22:32

а вот тут отдельное спасибо! попробую

упс... а как их менять, версии плеера в Мозилле? это flashGot или что-то встроенное в плеер?

screamge 24.05.2007 22:42

если не найдёте можете обращаться (он на flash-ripper валялся)

Micar 24.05.2007 22:55

случайно не помните, как это чудо называется?

screamge 24.05.2007 23:01

вроде flash_switcher, точно не помню))

http://www.screamge.com/lib/flash_switcher.xpi

Micar 25.05.2007 17:16

спасибо! установился плагин
правда в моем случае с битмапом, скорее всего, важна даже не версия плеера, а версия IE - черная дрянь вылезает, кажется, на машинах, где IE cтраый, в частности, фулскрин у него без стандартной нынешней рамочки...
в общем, спасибо всем, пойду страдать :(

this.create 25.05.2007 18:31

Посмотрите небольшой работающий пример. Проверял и в IE и в FF ( плеер стоит 9).
Код:

import flash.display.BitmapData;
//
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadInit = function(mc:MovieClip):Void  {
    changeImg(mc);
};
loader.addListener(listener);
//
var info:XML = new XML();
info.ignoreWhite = true;
info.load('info.xml');
info.onLoad = function(success) {
    if (success && !this.status) {
        loader.loadClip(this.firstChild.firstChild.attributes.name+'.jpg', mc);
    }
};
//
var mc:MovieClip = this.createEmptyMovieClip('mc', this.getNextHighestDepth());
//
//подмена изображения и удаление оригинала
function changeImg(mc:MovieClip):Void {
    //
    var bm:BitmapData = new BitmapData(mc._width, mc._height, false);
    var picBox:MovieClip = this.createEmptyMovieClip('picBox', this.getNextHighestDepth());
    //
    picBox.attachBitmap(bm, this.getNextHighestDepth());
    bm.draw(mc);
    //
    mc.removeMovieClip();
}

Код:

<?xml version="1.0" encoding="UTF-8"?>
<main>
    <img name="pic"/>
</main>



Часовой пояс GMT +4, время: 23:26.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.