Я должен перераспределить msvcrt.dll со своим приложением?

Если вы просто хотите, чтобы изображение было меньше и не заботились о точном размере:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToScale:(CGFloat)scale
{
    UIGraphicsBeginImageContextWithOptions(self.size, YES, scale);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

Установка масштаба на 0.25f даст вам изображение 816 на 612 с 8-мегапиксельной камеры.

Вот категория UIImage + Scale для тех, кто в ней нуждается.

30
задан Ian Boyd 4 July 2009 в 20:35
поделиться

4 ответа

Вы должны отправить msvcrt вместе с приложением. Это не гарантированная часть операционной системы. Если в определенной версии Windows он есть , то это только потому, что что-то в Windows его использует.

Приложения вышли из строя, когда более новые версии Windows не содержали бинарные файлы, которые, как предполагалось, были в Windows. Приложения перестали работать, когда пользователь решил не устанавливать WinFax, что означало, что msvcrt не был установлен вместе с ним.

From Raymond Chen :

В зависимости от того, какая версия Windows вы бежите, может быть множество поддержки DLL для вещей, которые не формальные компоненты продукта, но которые просто на прогулке.

...

Эта проблема сохраняется и сегодня. Люди идут поиски двоичных файлов, которые приходите с Windows в поисках кое-что они могут ремора . А потом они удивлены, когда эти двоичные файлы изменить или полностью исчезнуть.

Из KB326922 - Распространение общего компонента среды выполнения C в Visual C ++ :

... CRT DLL больше не рассматривается системный файл, поэтому распространять CRT DLL с любым приложением, которое полагается на это. Потому что это уже не системный компонент, установите его в свой каталог приложений Program Files с другим кодом для конкретного приложения. Это не позволяет вашему приложению используя другие версии CRT библиотека, которая может быть установлена ​​на системные пути.

Вы должны отправить msvcrt вместе с приложением, если вы ссылаетесь на MSVCRT .

Подробнее

было принято решение просто отказаться и объявить его DLL операционной системы, которая будет использоваться только компонентами операционной системы.

Хотя MSVCRT.DLL была операционной системой DLL в течение длительного времени, и была задокументирована как закрытая для приложений , все еще много людей , которые рассматривают ее как канал доставки среды выполнения C , и эти программы создают много проблем для команды разработчиков.

Вы должны распространять среду выполнения Microsoft Visual C вместе со своим приложением, поскольку Windows не поставляется с какой-либо средой выполнения Microsoft Visual C. может оказаться DLL с именем msvcrt.

24
ответ дан 27 November 2019 в 23:26
поделиться

msvcrt - это динамическая библиотека для среды выполнения Microsoft Visual C ++.

Есть два варианта использования среды выполнения C в Windows:

  1. ссылка на статические библиотеки времени выполнения.
    Используйте параметр / MT или / MTd , чтобы cl.exe. В этом случае у вас не будет зависимости от библиотеки DLL msvcrt, и поэтому вам не придется ее распространять. В Visual Studio щелкните правой кнопкой мыши «Проект» или «Решение», «Свойства»> «C / C ++» -> «Создание кода» -> «Использование библиотеки времени выполнения» Многопоточная и Многопоточная отладка соответственно. Это самый простой способ. Обратной стороной является то, что получаемый исполняемый файл больше.

  2. ссылка на динамическую библиотеку времени выполнения C.
    Вы будете использовать параметр / MD или / MDd для cl.exe.
    В Visual Studio щелкните правой кнопкой мыши «Проект» или «Решение», «Свойства»> «C / C ++» -> «Генерация кода» -> «Использование библиотеки времени выполнения» Многопоточная динамическая ссылка и Отладка многопоточной динамической ссылки соответственно. Это приводит к уменьшению размера EXE, но недостатком является то, что вы должны установить необходимый MSVCRT при установке приложения.


Каждый выпуск компилятора VC ++ поставляется с версией среды выполнения C (CRT). Visual Studio 2005 поставляется с v8 компилятора и v8 CRT. Фактическая DLL для v8 была msvcrt80.dll. Для VS2008 это была v9, а динамический CRT - msvcrt90.dll. Но CRT обновляется и исправляется чаще, чем компилятор C / C ++. Разработчик может загрузить обновленную CRT и построить на ее основе.

Если вы компилируете с динамической библиотекой CRT, вы ДОЛЖНЫ загрузить распространяемый пакет для необходимой версии среды выполнения с microsoft.com и выполнить (возможно, автоматическую) установку во время установки приложения.


До VS2005 разработчики создавали приложения, основанные на MSVCRT, который был в операционной системе Windows. Это даст преимущество DLL (небольшой размер изображения), но не потребует доставки DLL CRT при установке приложения. До Windoes 2000 разработчики даже устанавливали новый файл MSVCRT.dll в папку установки \ Windows. Но совместное использование CRT во многих приложениях и ОС оказалось очень плохой идеей. С WinXP SP2 CRT, входящий в состав Windows, значительно изменился, и любые приложения, зависящие от этой версии CRT, рисковали выйти из строя.

На этом этапе Microsoft сообщает разработчикам, что MSVCRT.dll, входящий в состав Windows, является частью ОС и может быть обслужен или исправлен в любое время. Создание приложения против него не поддерживается. Поэтому приложениям следует использовать один из перечисленных выше методов.

Ссылки:

31
ответ дан 27 November 2019 в 23:26
поделиться

msvcrt.dll has become a defacto part of the OS distribution. On windows 98 and 95 and possibly NT4 it was possible to get OS installs without it if one went to care to strip apps like WordPad out of the installation.

Given its ubiquty however, and the fact that since those OSs very few app developers have bothered to ship it, at least since windows 2000 its been an official part of the OS.

Microsoft support has a tool that you can use to double check what products DLLs are shipped with.

Perform a search like this and you can see that msvcrt.dll vsrsion 7.0.3790.0 was part of the Windows server 2003 release.

5
ответ дан 27 November 2019 в 23:26
поделиться

Ответ Криса не должен быть проголосован, потому что оба они правы.

Дело в том, что существует два разных набора MSVCRT. Один набор - это msvcrt80.dll, msvcrt90.dll и т.д., которые поставляются с Visual Studio. Это то, что люди обычно используют. И они должны быть перераспределены, как говорилось в других ответах.

Другое дело - msvcrt.dll (без цифр в имени файла) в папке System32, которая с некоторых пор предназначена для использования ТОЛЬКО самой ОС. И приложения никогда не должны заменять/переустанавливать ее. Однако некоторые приложения все же ссылаются на него, по некоторым причинам, например, чтобы убрать лишние зависимости для установки. Но имейте в виду, что не гарантируется, что он будет доступен в будущих версиях Windows.

12
ответ дан 27 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

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