2011-12-19 3 views
0

Я пытаюсь создать основанную на плитке игру AS3, которая использует PNG-изображения в качестве базы для карт, которые загружают их из библиотеки и преобразует данные в массив, причем каждый пиксель данных является индивидуальной плиткой. По сути, если бы у меня был PNG с разрешением 128x128 пикселей, и, скажем, зеленые пиксели были преобразованы в «GRASS» в моем массиве, я мог бы затем циклически перебирать массив и добавлять плитки к мувиклипу карты соответственно.Как преобразовать PNG-изображение в массив?

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

+2

что вы пробовали? как это работает не так, как ожидалось? или вы ожидаете, что сообщество сделает вашу работу за вас? Прочитайте [faq], чтобы узнать, какие вопросы нам нравятся, а что нет. :) oh, и добро пожаловать в StackOverflow: D –

+0

Просто любопытно, но этот вопрос вдохновлен чем-то Notch? –

+0

@PranavHosangadi: Я попытался использовать класс ByteArray, пытаясь вывести строку символов, которую я мог бы вручную преобразовать в видимую карту на экране, но я не смог найти способ декодирования PNG, который работал правильно. @ Adam: Нет, поскольку я буду создавать карты достаточно больших, визуальное представление было бы самым легким в создании и управлении. – PROWNE

ответ

3

Класс BitmapData кажется, что вы ищете. Убедитесь, что у изображений в вашей библиотеке есть собственное имя класса, а его базовый класс - это Bitmap (в свойствах), затем создайте экземпляр изображения и зациклируйте его данные изображения растрового изображения, используя getPixel.

Что-то вроде этого:

var image:Bitmap = new MyBMP(); 
var bmd:BitmapData = image.bitmapData; 

for(var y:int=0; y < bmd.height; ++y) 
{ 
    for(var x:int=0; x < bmd.width; ++x) 
    { 
     var pixelValue:uint = bmd.getPixel(x, y); 
     trace(pixelValue.toString(16)); 
     // Test if the pixelValue matches the colour you want. 
    }   
} 

Только примечание, удостоверьтесь, чтобы использовать getPixel32, если вы будете использовать альфа-канал.

+0

Удивительно! Отлично работает, спасибо. – PROWNE

Смежные вопросы