Просмотр полной версии : Как использовать часть изображения?
Заранее прощу прощения, если тема обсуждалась - не нашёл.
Вопрос:
В библиотеке есть изображение, например 100*100 px
Необходмо программно получать из него часть изображения, например 10*10px с заданной позиции и вывести в кадр.
К сожалению программированием на Action Script только что начал заниматься, но буду рад любой информации. Желательно конечно пример кода и указать мануал - где об этом можно почитать.
Спасибо.
Добавлено через 6 минут
Если не понятно написал вопрос - пожалуйста уточните )
А то буду ждать сам не знаю чего =)
ну посмотрите на класс BitmapData метод draw или просто на свойство scrollRect у DisplayObject
ну посмотрите на класс BitmapData метод draw или просто на свойство scrollRect у DisplayObject
Если не сложно, подскажи пожалуйста где смотреть.
Я тоже думал что информация по BitmapData мне поможет, но не нашел этой информации (
>>подскажи пожалуйста где смотреть
обычно в хелпе..:)
import flash.display.BitmapData;
import flash.geom.*;
var bmd:BitmapData = BitmapData.loadBitmap("image");//image - id картинки в библиотеке
var bmd1:BitmapData = new BitmapData(10, 10);
var rec:Rectangle = new Rectangle(0, 0, 10, 10);//нужная часть
bmd1.copyPixels(bmd, rec, new Point());
this.attachBitmap(bmd1, 0);
silin
Спасибо, пошёл пробовать. На вид - всё просто и понятно )
PS: Вот понимаю что в хелпе )) Но возможно на этом форуме понятие "хелп" отличается от моего. Так как качал различную доку по AS2 - и почему то не нашел нужной инфо. Хотя и склоняюсь к тому, что не там или не так искал )
UPD:
Добавлено через 13 часов 8 минут
Продолжение вопроса :)
Часть картинки из библиотеки благополучно выводится, но в координатах 0, 0
Как один из выходов я попробовл сделать так:
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
...
mc._x = 30;
mc._y = 30;
Есть ли другое решение? Дело в том, что таких частей картинок будет около 100.
да нормальное решение, если надо этими фрагментами еще и манипулировать, то по другому наверное никак
если нужно просто показать, то можно создать большой прозрачный битмап и копировать фрагменты в нужную часть этого битмапа
если нужно просто показать, то можно создать большой прозрачный битмап и копировать фрагменты в нужную часть этого битмапа
К такому же самому решению пришел час назад ) Очевидное рядом. ))
Правда, к сожалению, созрел еще один вопрос :)
Пример:
Есть картинки .png с прозрачными частями. Но когда я их накладываю - вместо прозрачного фона получается просто белый цвет.
В библеотеке для моей картинки выставил "без сжатия PNG\GIF" но это ничего не дало
В чем может быть дело?
Волгоградец
16.06.2009, 16:57
Значит .png не 32-х битная или в copyPixels() самый последний параметр поставили в false.
битмап, в который копируем должен быть прозрачным (по дефолту он 32-битный, но непрозрачный)
var bmp:BitmapData = new BitmapData(10, 10, true, 0x0);
Извиняюсь, надо было сразу указать:
var map:BitmapData = new BitmapData(600, 400, true);
...
map.copyPixels(bmdSurf, rec, new Point(x,y));
Как видно, битмап у меня прозрачный. А вот про copyPixels - поясните пожалуйста?
Или про рязрадность png
Добавлено через 1 минуту
Свойства png-картинки: Глубина цвета: 32
битмап у тебя непрозрачный белый
сравни с new BitmapData(600, 400, true, 0x0);//или 0x00FFFFFF, неважно
Разницы никакой.
var bmdSurf:BitmapData = BitmapData.loadBitmap("SurfTiles");
Вот здесь у меня идет загрузка png-картики для нарезки, может быть что-то тут не так?
Поясню еще - вырезаю из png прямоугольник 40*20. Там изображен ромб на прозрачном фоне.
Но после того, как я этот прямоугольник вырезал и накладываю один рядом с другим - фон белый.
Волгоградец
16.06.2009, 17:27
png без альфа канала значит. Или вообще не png.
>>Разницы никакой
позволь не поверить..
в общем смотри внимательно в какой битмап ты копируешь плюс то, что Волгоградец подсказал - последний аргумент в copyPixels (от него зависит чья альфа будет применена к результату)
Волгоградец
16.06.2009, 17:46
Еще такой вариант - указана такая битмапа:
var bmp:BitmapData = new BitmapData(200, 200, true, 0xFFAA0000);
Т.е. непрозрачная, поддерживающая прозрачность. Тогда при копировании пикселов та область, которая на png является прозрачной, копируется и исходная битмапа становится прозрачной и через нее виден белый фон. Поставь false.
Волгоградец
Спасибо. Так получилось
var map:BitmapData = new BitmapData(600, 400, false, 0x00FFFFFF);
Я уж хотел исходник прикрепить - а то даже и не знал как объяснить )
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.