![]() |
|
||||||||||
|
|||||
|
есть цветовое значение A = 0xFF00FF допустим, как его перевести в эквивалент черно-белого? ( как фотошоп переводит цветное изображение в черно белое?
С уважением. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Скорее уж тогда http://www.delphisources.ru/pages/fa...grayscale.html
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 122
|
Здравствуйте уважаемые программисты.
Я решил не создавать лишний раз тему, так как мой вопрос сильно связан с этой темой я решил написать сюда. Мне нужно цветной bitmapData сделать черно-белым. Книга на которую ссылается udaaff недоступна. Я воспользовался расчетами которые дал Wolsh, но у меня все равно что-то не получается 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(); } |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
внимательно изучите класс ColorMatrixFilter, он все это сделает гораздо быстрее.
Ну или можно шейдер написать на PixelBender'e
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
RGB поставить в соотношение 0.9 0.6 0.3
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 122
|
Извиняюсь я не внимательно повторил формулу. Только сейчас случайно заметил.
Так вот все работает! 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(); } i.o. и Psycho Tiger спасибо что откликнулись |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Почему нельзя сделать все проще?
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);
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
А чтобы не париться с матрицами, можно использовать класс ColorMatrix от Гранта Скиннера, и прибудет с тобой сила, Люк
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
Яркость не изменится, только если сумма констант будет равна 1.
И небольшое уточнение - константы в соответствии со стандартом HDTV: red=0.2127, green = 0.7152, blue = 0.0722. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:44. |
|
|
« Предыдущая тема | Следующая тема » |
|
|