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

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

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

Регистрация: Sep 2001
Адрес: Россия, Москва
Сообщений: 67
По умолчанию BitmapData.draw() с увеличенным разрешением

Приветствую. Прошу совета.

Программа рисования. Подложка - прозрачная. Следовательно - ластик должен именно стирать, а не быть кистью с цветом фона.
Пока идея в том, чтобы рисовать (Sprite.Graphics.lineTo и прочие...) в некоторой области, а затем нарисованное сразу же Bitmap.BitmapData.draw(Sprite) под эту область, а из нее - удалять векторное.
Но! Окно масштабируемое. Поэтому при включенном сглаживании, растр мылится. Без - чудовищен.

Как быть?
Я пытаюсь изменить размеры растра, чтобы рисовать с запасом - т.е. выше экранного разрешения. В два, три раза увеличить размеры BitmapData, а перед draw() увеличивать размеры Sprite.
Однако draw() рисует на Bitmap Sprite исходного размера, а не с увеличенными габаритами.

Т.е. суть: как мне в AS3 растеризовать вектор с увеличенным разрешением? Масштабировать растр - не вариант.

Старый 09.10.2012, 22:13
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Обратите внимание на параметры BitmapData#draw(). Там матрицу можно указать.
__________________
тут я

Старый 09.10.2012, 22:13
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 3  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Вроде Matrix для этого
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 09.10.2012, 22:33
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Однако draw() рисует на Bitmap Sprite исходного размера, а не с увеличенными габаритами.
Код AS3:
bitmapData.draw(sprite, sprite.transform.matrix); // врисует спрайт таким, какой он есть

Старый 10.10.2012, 00:01
bookworm вне форума Посмотреть профиль Отправить личное сообщение для bookworm Найти все сообщения от bookworm
  № 5  
Ответить с цитированием
bookworm

Регистрация: Sep 2001
Адрес: Россия, Москва
Сообщений: 67
Спасибо за ответы, но матрица преобразования - не то.
Она будет работать с растром и масштабирование будет сделано для растра, с соответствующим ухудшением качества.
Я же хочу провести растеризацию, допустим спрайта размером 100 на 100, в растр 300 на 300 через промежуточный спрайт 300 на 300 (или напрямую). Т.е. масштабирование будет сделано векторно!

Старый 10.10.2012, 00:10
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 6  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
Она будет работать с растром и масштабирование будет сделано для растра
А может сначала попробовать?
__________________
:)

Старый 10.10.2012, 08:06
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
в растр 300 на 300 через промежуточный спрайт 300 на 300 (или напрямую). Т.е. масштабирование будет сделано векторно!
Оо. Это что-то новое. Растр не будет масштабироваться "векторно", даже если его в 10 спрайтов положить
Да и размеры спрайта зависят от размеров содержимого. Пустому спрайту нельзя задать размеры

Старый 10.10.2012, 12:48
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 8  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Оо. Это что-то новое. Растр не будет масштабироваться "векторно", даже если его в 10 спрайтов положить
Да и размеры спрайта зависят от размеров содержимого. Пустому спрайту нельзя задать размеры
как я понял, изначально - будет спрайт 100*100.
который просто увеличат в размере и отрисуют уже увеличенным.

Старый 10.10.2012, 16:38
bookworm вне форума Посмотреть профиль Отправить личное сообщение для bookworm Найти все сообщения от bookworm
  № 9  
Ответить с цитированием
bookworm

Регистрация: Sep 2001
Адрес: Россия, Москва
Сообщений: 67
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Оо. Это что-то новое.
Поглумиться-то - это конечно, а почитать внимательно - нет.

Еще раз выражу свою мысль:
В спрайте есть фигура 100х100.
Я хочу получить в растре 300х300, но масштабирование выполнить векторно.
Например, если я увеличу ширину спрайта до 300х300, это произойдет.
Но в растр запишется 100х100.

Если же, как рекомендуют, я воспользуюсь матрицей преобразования в методе draw(), то я получу РАСТРОВОЕ масштабирование.

Поправьте, возможно я не понял или накосячил в коде?

Код AS3:
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Matrix;
 
var matrix : Matrix = new Matrix ();
var sprite:Sprite = new Sprite();
var bitmap:Bitmap = new Bitmap();
var bitmapData:BitmapData = new BitmapData(900, 900);
addChild(sprite);
addChild(bitmap);
matrix.scale (3, 3);
sprite.graphics.lineStyle(2, 0xFF0000);
sprite.graphics.moveTo(50,50);
sprite.graphics.lineTo(110,110);
bitmapData.draw(sprite, matrix);
bitmap.smoothing = true;
bitmap.bitmapData = bitmapData;
bitmap.width = 300;
bitmap.height = 300;
bitmap.x = 130;
Качество bitmap'а заметно хуже. Или просто лучше и не получится?

Добавлено через 4 минуты
Цитата:
Сообщение от Aquahawk Посмотреть сообщение
А может сначала попробовать?
Хотя... возможно вы правы, и ухудшение появляется уже при масштабировании самого увеличенного растра к размеру спрайта...

Что-то я не вижу выхода из этой ситуации, который обеспечит и сохранение качества и работу ластика.

Добавлено через 6 минут
Вот оно!
smoothing надо было включать после присваивания bitmapData.

Спасибо всем, кто настаивал на использовании матрицы, особенно Aquahawk.

Старый 10.10.2012, 17:49
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Если же, как рекомендуют, я воспользуюсь матрицей преобразования в методе draw(), то я получу РАСТРОВОЕ масштабирование.
Я ни сколько не глумился =) Сказал абсолютно серьезно. Не будет никакого векторного масштабирования растрового изображения. Оно по-любому будет таким же, как если бы просто картинку масштабировать, без спрайта.

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

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

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


 


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


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