Изображение, изменяющее размеры эффективности в C# и.NET 3.5

Просто типичная Наука Аккомпанемента 101 комментарий типа:

я угрожал своим студентам случайными действиями экстремального насилия, если они когда-нибудь делали это в присвоениях. И они все еще сделали. Смысл в надлежащем добавлении отступа, однако, казалось, был полностью потерян им. Идет для показа, почему Python был бы идеальным языком для новичков, я предполагаю.

15
задан Matthew Nichols 31 August 2009 в 12:36
поделиться

6 ответов

Обработка изображения - обычно дорогостоящая операция. Вы должны помнить, что 32-битное цветное изображение расширяется в памяти до 4 * пикселей в ширину * в высоту до того, как ваше приложение даже запустит какую-либо обработку. Определенно следует ожидать всплеска, особенно при любой обработке пикселей.

Тем не менее, единственное место, где я мог видеть, что вы можете ускорить процесс или снизить воздействие на ваш процессор, - это попробовать режим интерполяции более низкого качества.

6
ответ дан 1 December 2019 в 04:27
поделиться

Я знаю, что DirectX, выпущенный с Windows 7, как утверждается, обеспечивает аппаратное ускорение 2D. Я не знаю, означает ли это, что он превзойдет GDI + при таком типе операций. У MS есть довольно нелестное описание GDI здесь , которое, помимо прочего, подразумевает, что он медленнее, чем должен быть.

Если вы действительно хотите попробовать делать такие вещи самостоятельно, есть отличный Учебник GDI , в котором это показано. Автор использует как SetPixel, так и «небезопасные блоки» в разных частях своих руководств.

Кстати, многопоточность, вероятно, поможет вам здесь, если на вашем сервере более одного процессора. То есть вы можете обрабатывать более одного изображения одновременно и, вероятно, получить более быстрые результаты.

3
ответ дан 1 December 2019 в 04:27
поделиться

Вы можете попробовать

newGrapics.InterpolationMode = InterpolationMode.Low;

, поскольку HighQualityBicubic будет самым процессором -интенсивные операции передискретизации, но, конечно, вы потеряете качество изображения.

Кроме того, я не вижу ничего, что можно было бы сделать, чтобы ускорить ваш код. GDI + почти наверняка будет самым быстрым на компьютере с Windows (ни один код, написанный на C #, не сможет превзойти чистую библиотеку C), а использование других библиотек изображений несет в себе потенциальный риск небезопасного и / или ошибочного кода.

Суть в том, изменение размера изображения - дорогостоящая операция, что бы вы ни делали. Самым простым решением в вашем случае может быть просто замена ЦП вашего сервера на более быструю модель.

2
ответ дан 1 December 2019 в 04:27
поделиться

Когда вы пишете

, я написал веб-службу для изменения размера загруженные пользователем изображения

Мне кажется, что пользователь загружает изображение на (веб-?) сервер, а затем сервер вызывает веб-службу для масштабирования?

Если это так, я бы просто переместил масштабирование прямо на сервер. Имхо, масштабирование изображения не оправдывает его собственный веб-сервис. И вы получаете совсем немного ненужного трафика, идущего с сервера на веб-службу и обратно. В частности, потому что изображение, вероятно, закодировано в base64, что увеличивает трафик данных.

Но я здесь только предполагаю.

ps. Небезопасные блоки сами по себе не дают никакого преимущества, они просто позволяют небезопасному коду быть быть скомпилированным. Так что, если вы не напишете свою собственную масштабируемую маршрутизацию, небезопасный блок не поможет.

2
ответ дан 1 December 2019 в 04:27
поделиться

Вы можете попробовать ImageMagick. Это бесплатно, а также есть оболочка .NET: щелкните здесь . Или здесь . Или вы можете отправить команду в оболочку DOS.

Мы использовали ImageMagick на серверах Windows время от времени для пакетной обработки, а иногда и для более гибкого преобразования изображений.

Конечно, есть и коммерческие компоненты, например, Leadtools и Atalasoft. Мы их никогда не пробовали.

2
ответ дан 1 December 2019 в 04:27
поделиться

Я подозреваю, что всплеск вызван тем, что у вас включен режим интерполяции. Все режимы интерполяции работают на пиксель, а высокое качество BiCubic примерно настолько высокое, насколько вы можете использовать с GDI +, так что я подозреваю, что расчеты на пиксель утомляют ваш процессор.
В качестве теста попробуйте понизить режим интерполяции до InterpolationModeNearestNeighbor и посмотреть, упадет ли скачок ЦП - если да, то это ваша вина.
Если это так, то сделайте несколько проб и ошибок для определения стоимости и качества, скорее всего, вам не понадобится High Quality BiCubic для получения достойных результатов

0
ответ дан 1 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: