Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.05.2014, 15:30
Vlad84 вне форума Посмотреть профиль Отправить личное сообщение для Vlad84 Найти все сообщения от Vlad84
  № 1  
Ответить с цитированием
Vlad84

Регистрация: Jul 2012
Сообщений: 148
По умолчанию Неполное перекрашивание

Есть картинка (фон и черный текст), которую я обхожу getPixel-ом. Нужно перекрасить текст, но грани каждой буквы имеют сглаживание, т.е. цвет на гранях - это смесь цветов текста+цвет фона.



Пока вижу только 2 решения:
1)Делать заливку нового цвета на 1-2 пикселя больше во все стороны.
2)Закрашивать все, что не равняется цвету фона (но вариант очень ограниченный).


Есть ли более точный метод?
Изображения
 

Старый 06.05.2014, 15:31
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Glow black 2-2 strength 300%
Поробуй как вариант
__________________
Марк Tween

Старый 06.05.2014, 15:35
Vlad84 вне форума Посмотреть профиль Отправить личное сообщение для Vlad84 Найти все сообщения от Vlad84
  № 3  
Ответить с цитированием
Vlad84

Регистрация: Jul 2012
Сообщений: 148
Не поможет, это единая картинка

Старый 06.05.2014, 16:27
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
что то сразу не поможет. Вы находите по цвету где текст, делаете скриншот области через draw, создаете битмап (чисто текста ) и кладете поверх, а дальше любой фильтр можно
__________________
Марк Tween

Старый 07.05.2014, 00:59
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
threshold'ом можно что-то разрулить, но сглаживание, естественно, похерится при этом
Код AS3:
var tol:int = 32;
/*
// вариант для черных букв на произвольном фоне: красим все, что черное с какой-то точностью
bmd.threshold(bmd, bmd.rect, new Point(), "<", 0xFF-tol, 0xFFFF0000, 0xFF);
*/
 
// вариант для любых букв на конкретном (0xB0FFFF) фоне: красим все, что отличается от фона с какой-то точностью
var map:BitmapData = new BitmapData(bmd.width, bmd.height, false, 0xB0FFFF );
map.draw(bmd, null, null, BlendMode.DIFFERENCE);
bmd.threshold(map, map.rect, new Point(), ">", tol, 0xFFFF0000, 0xFF);
map.dispose();

Старый 07.05.2014, 01:14
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Матерная какая то тема получилась по картинкам
__________________
Марк Tween

Старый 07.05.2014, 02:48
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Вот и мой вариант
ColorFill.swf   (4.4 Кб)

Код AS3:
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.ColorTransform;
import flash.geom.Point;
import flash.filters.ColorMatrixFilter;
import flash.geom.Rectangle;
import flash.display.BitmapDataChannel;
 
// Это наше изображение с растеризованным текстом.
var msk:BitmapData = new RasterizedText();
 
// Здесь окажется наш результат.
var bmd:BitmapData = new BitmapData(msk.rect.width, msk.rect.height);
var bmp:Bitmap = new Bitmap(bmd);
    bmp.y = 200;
    addChild(bmp);
 
 
// Цвет фона и текста.
var bgColor:uint = msk.getPixel32(0, 0);
var txColor:uint = 0xffff0000;
 
// РАЗ: Обесцвечиваем растр.
desaturate(msk);
 
// ДВА: Подтягиваем уровни.
levels(msk, msk.getPixel32(0, 0));
 
// ТРИ: Разукрашиваем.
colorize(bmd, msk, bgColor, txColor);
 
/** Обесцвечивает растровое изображение. */
function desaturate(bmd:BitmapData):void
{
	var r:Number=0.212671;
	var g:Number=0.715160;
	var b:Number=0.072169;
 
	var matrix:Array = [r, g, b, 0, 0,
                        r, g, b, 0, 0,
                        r, g, b, 0, 0,
                        0, 0, 0, 1, 0];
 
	bmd.applyFilter(bmd, bmd.rect, new Point(), new ColorMatrixFilter(matrix));
}
 
/** Вытягивает уровни растра, делая указанный уровень white белым. */
function levels(bmd:BitmapData, white:uint):void
{
	var l:Number = 255 / (white & 0xff);
 
	var matrix:Array = [l, 0, 0, 0, 0,
                        0, l, 0, 0, 0,
                        0, 0, l, 0, 0,
                        0, 0, 0, 1, 0];
 
	bmd.applyFilter(bmd, bmd.rect, new Point(), new ColorMatrixFilter(matrix));
}
 
/** Разукрашивает картинку с текстом. */
function colorize(bmd:BitmapData, msk:BitmapData, bgColor:uint, txColor:uint):void
{
	var rct:Rectangle = bmd.rect;
	var pnt:Point = new Point();
	var tmp:BitmapData = new BitmapData(rct.width, rct.height, true, bgColor);
	    tmp.copyChannel(msk, rct, pnt, BitmapDataChannel.RED, BitmapDataChannel.ALPHA);
	bmd.fillRect(rct, txColor);
	bmd.copyPixels(tmp, rct, pnt, msk, pnt, true);
}
Вложения
Тип файла: swf ColorFill.swf (4.4 Кб, 118 просмотров)
__________________
Поймай яблоко 2!

Старый 07.05.2014, 16:44
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
до кучи
recolor.swf   (11.3 Кб)

Код AS3:
package 
{
	import flash.display.*;
	import flash.filters.*;
	import flash.geom.*;
 
 
	public class Main extends Sprite 
	{
		[Embed(source="screen.jpg")]
		private const screen_jpg:Class;
 
 
		public function Main():void 
		{
 
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			// исходное изображение 
			var bmd:BitmapData = (new screen_jpg() as Bitmap).bitmapData;
 
			var p:Point = new Point();
			var r:Rectangle = bmd.rect;
			var bgColor:uint = bmd.getPixel32(0, 0);
			var txColor:uint = 0xFF0000; 
 
			// разница между фоном и битмапом
			var mask:BitmapData = new BitmapData(bmd.width, bmd.height, true, bgColor );
			mask.draw(bmd, null, null, BlendMode.DIFFERENCE);
 
			// 'перекладывем' rgb в альфу
			var h:Vector.<Vector.<Number>> = mask.histogram();
			var k:Number=0;
			for (var i:int = 0; i < 3; i++) 
			{
				for (var j:int = 0; j < 255; j++) if (!h[i][j]) break;
				k += j;
			}
			k = 0xFF / k;
			var matrix:Array = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, k, k, k, 0, 0];
			mask.applyFilter(mask, r, p, new ColorMatrixFilter(matrix));
 
			//  закрашиваем фон по маске
			var res:BitmapData = new BitmapData(bmd.width, bmd.height, false, bgColor);
			var fill:BitmapData = new BitmapData(bmd.width, bmd.height, false, txColor);
			res.copyPixels(fill, r, p, mask, p);
 
			fill.dispose();
			mask.dispose();
 
			addChild(new Bitmap(bmd));
			addChild(new Bitmap(res)).y=bmd.height;
 
 
		}
 
	}
 
}
Вложения
Тип файла: swf recolor.swf (11.3 Кб, 100 просмотров)


Последний раз редактировалось silin; 07.05.2014 в 23:19.
Старый 08.05.2014, 12:58
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 9  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Нажмите на изображение для увеличения
Название: Compare.png
Просмотров: 141
Размер:	20.5 Кб
ID:	30858
__________________
Поймай яблоко 2!

Старый 08.05.2014, 21:56
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
ну да..
я стал мудрить из-за того, что твой вариант не всякий расклад фон-шрифт подымет, ну я типа хотел чтоб универсальный, но как-то идеального все равно не вышло

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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