2012-06-05 2 views
1

Как установить цвет ЧЕРНЫЙ: 0x000000, чтобы быть прозрачным, нормальный магия розового прозрачна, но я хочу установить ЧЕРНЫЙ.Как установить цвет прозрачности для импортируемого изображения в AS2

Если вы не понимаете: http://j.imagehost.org/0829/WoodyGX_0.jpg

У меня есть этот образ, и при преобразовании 80x80 спрайта я не хочу, чтобы фон прозрачный, что означает: нет фона, только характера.

+0

Если это помогает ваш процесс, рекомендуется использовать оригинальные несжатые изображения в формате BMP. 'http://j.imagehost.org/download/0829/WoodyGX_0 http://j.imagehost.org/download/0829/WoodyGX_1 http: // j.imagehost.org/download/0829/WoodyGX_2' – arttronics

ответ

1

Примечание: Это ответ в ActionScript 3, если вы либо решите перейти на ActionScript 3, но и для других людей и общей информации.



Вы можете создать новый BitmapData от источника BitmapData с черными пикселями удалены (преобразованы в альфа-канал).

Я создал эту функцию для вас:

// Takes a source BitmapData and converts it to a new BitmapData, ignoring 
// dark pixels below the specified sensitivity. 
function removeDarkness(source:BitmapData, sensitivity:uint = 10000):BitmapData 
{ 
    // Define new BitmapData, with some size constraints to ensure the loop 
    // doesn't time out/crash. 
    // This is for demonstration only, consider creating a class that manages 
    // portions of the BitmapData at a time (up to say 50,000 iterations per 
    // frame) and then dispatches an event with the new BitmapData when done. 
    var fresh:BitmapData = new BitmapData(
     Math.min(600, source.width), 
     Math.min(400, source.height), 
     true, 0xFFFFFFFF 
    ); 

    fresh.lock(); 

    // Remove listed colors. 
    for(var v:int = 0; v < fresh.height; v++) 
    { 
     for(var h:int = 0; h < fresh.width; h++) 
     { 
      // Select relevant pixel for this iteration. 
      var pixel:uint = source.getPixel(h, v); 

      // Check against colors to remove. 
      if(pixel <= sensitivity) 
      { 
       // Match - delete pixel (fill with transparent pixel). 
       fresh.setPixel32(h, v, 0x00000000); 

       continue; 
      } 

      // No match, fill with expected color. 
      fresh.setPixel(h, v, pixel); 
     } 
    } 


    // We're done modifying the new BitmapData. 
    fresh.unlock(); 


    return fresh; 
} 

Как вы можете видеть, он принимает:

  • BitmapData, которые вы хотите удалить темные пиксели.
  • uint, представляющий, сколько оттенков черного/серого вы хотите удалить.

А вот демо с использованием исходного изображения:

var original:Loader = new Loader(); 
original.load(new URLRequest("http://j.imagehost.org/0829/WoodyGX_0.jpg")); 
original.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); 


// Original image has loaded, continue. 
function imageLoaded(e:Event):void 
{ 
    // Capture pixels from loaded Bitmap. 
    var obmd:BitmapData = new BitmapData(original.width, original.height, false, 0); 
    obmd.draw(original); 


    // Create new BitmapData without black pixels. 
    var heroSheet:BitmapData = removeDarkness(obmd, 1200000); 
    addChild(new Bitmap(heroSheet)); 
} 
2

Возможно, вам лучше в этот момент просто взять его в фейерверк, используя волшебную палочку, чтобы выбрать черные пиксели, удалить их и сохранить в виде прозрачного png. Затем используйте это.

Однако, если вы хотите, чтобы ваша жизнь была сложнее, чем нужно, вы могли бы использовать getPixel для получения всех ваших черных пикселей, а затем использовать setPixel для их прозрачности. Но все дело в том, что речь идет о скорости, а не о медленных пиксельных операциях.

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