Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   RGB -> grayscale (http://www.flasher.ru/forum/showthread.php?t=131924)

firsoff 31.10.2009 12:55

RGB -> grayscale
 
есть цветовое значение A = 0xFF00FF допустим, как его перевести в эквивалент черно-белого? ( как фотошоп переводит цветное изображение в черно белое?

С уважением.

udaaff 31.10.2009 13:43

http://books.google.com/books?id=Qli...age&q=&f=false

Wolsh 01.11.2009 02:28

Скорее уж тогда http://www.delphisources.ru/pages/fa...grayscale.html

AntonSurkont 22.09.2010 14:19

Здравствуйте уважаемые программисты.
Я решил не создавать лишний раз тему, так как мой вопрос сильно связан с этой темой я решил написать сюда.
Мне нужно цветной bitmapData сделать черно-белым.
Книга на которую ссылается udaaff недоступна.
Я воспользовался расчетами которые дал Wolsh, но у меня все равно что-то не получается
Код AS3:

private function coloredOff():void {
  bmData2.lock();
  var color:uint;
  var red:uint;
  var green:uint;
  var blue:uint;
  for (var i:int=0;i<bmData2.height;i++) {
    for (var j:int=0;j<bmData2.width;j++) {
      color=bmData1.getPixel32(j,i);
      //if (j<3) { trace("j="+j+" i="+i); }
      if ((i==1)&&(j==1)) { trace(color.toString(16)); };
      red=(color>>16)&0xFF;
      green=(color>>8)&0xFF;
      blue=color&0xFF;
      if ((i==1)&&(j==1)) { trace(red); };
      red=Math.round(red*0.56);
      if ((i==1)&&(j==1)) { trace(red); };
      green=Math.round(green*0.33);
      blue=Math.round(blue*0.11);
      color&=0xFF00FFFF;
      color|=(red<<16);
      color&=0xFFFF00FF;
      color|=(green<<8);
      color&=0xFFFFFF00;
      color|=blue;
      bmData2.setPixel32(j,i,color);
      if ((i==1)&&(j==1)) { trace(color.toString(16)); };
    }
  }
  bmData2.unlock();
}

Помогите плиз

i.o. 22.09.2010 14:30

внимательно изучите класс ColorMatrixFilter, он все это сделает гораздо быстрее.
Ну или можно шейдер написать на PixelBender'e

Psycho Tiger 22.09.2010 14:32

RGB поставить в соотношение 0.9 0.6 0.3

AntonSurkont 22.09.2010 14:36

Извиняюсь я не внимательно повторил формулу. Только сейчас случайно заметил.
Так вот все работает!
Код AS3:

private function coloredOff():void {
  bmData2.lock();
  var color:uint;
  var red:uint;
  var green:uint;
  var blue:uint;
  var blackWhite:uint;
  for (var i:int=0;i<bmData2.height;i++) {
    for (var j:int=0;j<bmData2.width;j++) {
      color=bmData1.getPixel32(j,i);
      red=(color>>16)&0xFF;
      green=(color>>8)&0xFF;
      blue=color&0xFF;
      blackWhite=Math.round(red*0.56+green*0.33+blue*0.11);
      color&=0xFF00FFFF;
      color|=(blackWhite<<16);
      color&=0xFFFF00FF;
      color|=(blackWhite<<8);
      color&=0xFFFFFF00;
      color|=blackWhite;
      bmData2.setPixel32(j,i,color);
    }
  }
  bmData2.unlock();
}

Добавлено через 58 секунд
i.o. и Psycho Tiger спасибо что откликнулись

i.o. 22.09.2010 14:48

Почему нельзя сделать все проще?
Код AS3:

var bmp:BitmapData = new BitmapData(1600, 1200);
var b:Bitmap = new Bitmap(bmp);
this.addChild(b);
var arr:Array = [
0.3, 0.6, 0.1, 0.0, 0.0,
0.3, 0.6, 0.1, 0.0, 0.0,
0.3, 0.6, 0.1, 0.0, 0.0,
0.0, 0.0, 0.0, 1.0, 0.0
];
var cmf:ColorMatrixFilter = new ColorMatrixFilter(arr);
bmp.applyFilter(new BMP(1600, 1200), new Rectangle(0, 0, bmp.width,
bmp.height), new Point(0, 0), cmf);

оригинальную статью читайте здесь

gloomyBrain 22.09.2010 14:58

А чтобы не париться с матрицами, можно использовать класс ColorMatrix от Гранта Скиннера, и прибудет с тобой сила, Люк

tsarapkabel 22.09.2010 22:24

Цитата:

Сообщение от Psycho Tiger (Сообщение 937772)
RGB поставить в соотношение 0.9 0.6 0.3

Яркость не изменится, только если сумма констант будет равна 1.

И небольшое уточнение - константы в соответствии со стандартом HDTV: red=0.2127, green = 0.7152, blue = 0.0722.


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

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