Мне нужен алгоритм, который определит максимальное увеличение масштаба, которое возможно для изображения.
Правила (ограничение размера BitmapData объекта для Flash Player, но это не вопрос Flash):
- ширина и длина изображения должны быть меньше 8,191 пикселей
- максимальное количество пикселей на изображении не может превышать 16,777,215
поэтому, как указано в документации:
если объект BitmapData имеет размер 8 191 пиксель
в ширину, это может быть только 2048 пикселей
высокий.
В своем коде я сначала определяю, нарушено ли какое-либо из этих правил, а также выбрасывает и выдает ошибку. это позволяет мне знать, что любое изображение, которое загружается и не выдает ошибку, имеет масштабируемость.
Я использую изображение 2514 width x 1029 height
. Это изображение не выдаст ошибку, так как ширина и высота меньше 8191, а количество пикселей или ширина, умноженная на высоту, меньше 16,777,215.
Я считаю, что у меня правильный мозг, и я не очень уверен в своих математических навыках, но вот что я придумал, чтобы определить максимально допустимый масштаб изображения.
private static const MAX_BITMAP_MEASUREMENT:uint = 8191;
private static const MAX_BITMAP_PIXELS:uint = 16777215;
var imageWidth:uint = 2514;
var imageHeight:uint = 1029;
var roughScaleUp:Number = 1.0 / Math.max(imageWidth, imageHeight) * MAX_BITMAP_MEASUREMENT;
var scaleBack:Number = Math.max(Math.min(imageWidth, imageHeight) * roughScaleUp - MAX_BITMAP_PIXELS / MAX_BITMAP_MEASUREMENT, 0);
var maxScale:Number = 1.0 / (Math.max(imageWidth, imageHeight) + scaleBack) * MAX_BITMAP_MEASUREMENT;
Этот код выводит максимальный масштаб для моего изображения как 2.145144435977516, но я проверил его, и все еще остается много пиксельного пространства, так что его можно увеличить в большем масштабе, и я уверен, что мой код ужасно неправильно.
Есть ли здесь математические волшебники, которые хотят помочь выпускнику художественной школы? Я полностью готов признать, что, возможно, есть гораздо более простое решение этой проблемы, и я готов к плетям.