![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
В АС 3 метод getPixels возвращает ByteArray. К тому же появились методы для работы с байтами.
Что мы можем изменить в полученном массиве? Как организован возвращаемый этой функцией массив? Методы getPixel и setPixel слишком медленные что бы обработать большое количество пикселов, Можно ли манипулировать пикслемами в массиве что возвращает функция getPixels ? Как я понимаю обработать массив байтов можно намного быстрее чем последовательно вызывать функции getPixel и setPixel. И ещё почему метод copyPixels в несколько раз быстрее чем вызов getPixels и setPixels у двух растровых объектов? Последний раз редактировалось miramax; 25.10.2006 в 16:15. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А что тебя конкретно интересует? Ты можешь изменить любой байт, если нужно. Или нужно послать массив байтов на сервер?
import flash.utils.ByteArray; import flash.geom.Rectangle; import flash.display.BitmapData; var rect:Rectangle = new Rectangle(0,0,5,5); var bitmap:BitmapData = new BitmapData(10,10,false,0xFF0000); var byteArray:ByteArray = bitmap.getPixels(rect); trace(byteArray[0],byteArray[1],byteArray[2]); // 255 255 0 |
|
|||||
|
Цитата:
Хотелось бы заменить пикселы определённых цветов на пикселы других цветов. Только очень быстро |
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
Как я понимаю, вопрос был в каком формате хранятся пиксели в ByteArray.
Аналогично этому: var ar:Array = new Array();
for (var y:int=0; y<bitmap.height; y++) {
for (var x:int=0; x<bitmap.width; x++) {
ar.push(bitmap.getPixel32(x,y));
}
}
А то, что copyPixels работает быстрее надо просто принять как факт, скорее всего там происходит тупо копирование куска памяти в то время как в getPixels и setPixels создание нового объекта ByteArray с последовательным преобразованием пикселей туда обратно. |
|
|||||
|
Отлично
![]() А как мне определить координаты пиксела? относительно прямоугольника из которого я взял эти пикселы. |
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
О! Появился. А я уж, по затянувшемуся молчанию решил, что тебя за сорванные сроки с картой заказчик порешил
![]() Координаты просто, на каждую точку 4 байта, значит надо позиционироваться на 4*(y*ширина_прямоугольника + x) и читать значение. // заливаем все красным
var bitmap:BitmapData = new BitmapData(10,10,false,0xFF0000);
// ставим синюю точку в 2:3
bitmap.setPixel(2,3,0x0000FF);
// считываем ByteArray прямоугольника 5 на 5
var rect:Rectangle = new Rectangle(0,0,5,5);
var byteArray:ByteArray = bitmap.getPixels(rect);
// показываем цвет точки в 2:3
trace(getPixel(2,3, byteArray,rect).toString(16));
// и на всякий случай в 3:3
trace(getPixel(3,3, byteArray,rect).toString(16));
// возвращает 32 цвет точки
function getPixel(x:Number, y:Number, b:ByteArray, r:Rectangle):Number {
b.position = (y*r.width + x)*4;
return b.readUnsignedInt();
}
|
|
|||||
|
Цитата:
![]() |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
miramax, а откуда ж там эти данные возьмутся?
|
|
|||||
|
4AM Games
|
Цитата:
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
http://ink.envisionext.com/swf2png/
я тут запостил отчёт о сохранение картинки на сервер. т.е. BitmapData в byteArray (PNG картинка) и отправка готовой картинки для записи на сервер. |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|