Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Обрезка изображения C # без библиотеки .net

Автор вопроса: CommunityОтветов: 4

Может ли кто-нибудь посоветовать, как обрезать изображение, скажем, jpeg, без использования каких-либо конструкций .NET framework, только необработанные байты? Поскольку это единственный * способ в Silverlight ...

Или указать на библиотеку?

Меня не волнует рендеринг, я хочу манипулировать jpg перед загрузкой.

* В Silverlight нет библиотек GDI + (System.Drawing) или WPF (System.Windows.Media.Imaging).

Lockbits требует GDI +, уточненный вопрос

Использование fjcore: http://code.google.com/p/fjcore/ для изменения размера но нет возможности обрезать :(

image-manipulationsilverlight

Ответы

Ответ 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 - работать с необработанными байтами? Это ... невероятно неудачно.)

Ответ 3 · рейтинг 2 · Brian Leahy

Я смотрю: http://code.google.com/p/fjcore/source/checkout Бесплатная библиотека для обработки изображений.

Ответ 4 · neslekkiM

где выполняется silverlight? Есть ли вообще какая-то причина отправлять клиенту полное изображение, чтобы он обрезал его? Сделайте это на сервере ... (если вы не создаете редактор изображений, который есть ..)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы