Может ли кто-нибудь посоветовать, как обрезать изображение, скажем, jpeg, без использования каких-либо конструкций .NET framework, только необработанные байты? Поскольку это единственный * способ в Silverlight ...
Или указать на библиотеку?
Меня не волнует рендеринг, я хочу манипулировать jpg перед загрузкой.
* В Silverlight нет библиотек GDI + (System.Drawing) или WPF (System.Windows.Media.Imaging).
Lockbits требует GDI +, уточненный вопрос
Использование fjcore: http://code.google.com/p/fjcore/ для изменения размера но нет возможности обрезать :(
Ответ 1 · рейтинг 3 · Lou Franco
Вы могли бы легко написать кадрирование самостоятельно в fjcore. Начните с кода для Resizer
http://web.archive.org/web/20140304090029/http://code.google.com:80/p/fjcore/source/browse/trunk/FJCore/Resize/ImageResizer.cs?
и FilterNNResize - вы можете видеть, как хранятся данные изображения - это простые массивы пикселей.
Важная часть:
for (int y = 0; y < _newHeight; y++)
{
i_sY = (int)sY; sX = 0;
UpdateProgress((double)y / _newHeight);
for (int x = 0; x < _newWidth; x++)
{
i_sX = (int)sX;
_destinationData[0][x, y] = _sourceData[0][i_sX, i_sY];
if (_color) {
_destinationData[1][x, y] = _sourceData[1][i_sX, i_sY];
_destinationData[2][x, y] = _sourceData[2][i_sX, i_sY];
}
sX += xStep;
}
sY += yStep;
}
показывает, что данные хранятся в массиве цветовых плоскостей (1 элемент для 8bpp серого, 3 элемента для цвета), и каждый элемент имеет двумерный массив байтов (x, y) для изображения.
Вам просто нужно перебрать целевые пиксели, копируя их из соответствующего места в источнике.
edit: не забудьте предоставить патч автору fjcore
Ответ 2 · рейтинг 2 · Shog9
ImageMagick неплохо справляется. Если вы согласны с передачей задач редактирования на ваш сервер ...
(Серьезно? Рекомендуемый способ управления изображениями в Silverlight - работать с необработанными байтами? Это ... невероятно неудачно.)
Ответ 4 · neslekkiM
где выполняется silverlight? Есть ли вообще какая-то причина отправлять клиенту полное изображение, чтобы он обрезал его? Сделайте это на сервере ... (если вы не создаете редактор изображений, который есть ..)