Качество сохраненного JPG в C#

Это должно быть. ANSI/ст¦не¦рт ISO указывает в [1 112] 21.3.3 basic_string способность :

size_type size() const;

Возвраты: количество подобных символу объектов в настоящее время в строке.

bool empty() const;

Возвраты: size() == 0

Однако в пункте 18 21.3.1 basic_string конструкторы это указывает, что оператор присваивания типа символов использует traits::length() для установления длины управляемой последовательности, таким образом, Вы могли закончить с чем-то странным при использовании другой специализации std::basic_string<>.

я думаю, что 100%-й корректный оператор то, что

(str.empty() == (str == std::string()))

или что-то как этот. Если Вы не сделали ничего странного, то std::string("") и std::string() должен быть эквивалентен

, Они логически подобны, но они тестируют на разные вещи. str.empty() проверяет, пуста ли строка, где другой проверяет на равенство против пустой строки C-стиля. Я использовал бы, какой бы ни более подходит для того, что Вы пытаетесь сделать. Если Вы хотите знать, пуста ли строка, то используйте str.empty().

63
задан KdgDev 27 September 2009 в 23:26
поделиться

2 ответа

В следующем примере кода показано, как создать EncoderParameter с помощью конструктора EncoderParameter. Чтобы запустить этот пример, вставьте код и вызовите метод VaryQualityLevel .

В этом примере требуется файл изображения с именем TestPhoto.jpg, расположенный по адресу c:.

private void VaryQualityLevel()
{
    // Get a bitmap.
    Bitmap bmp1 = new Bitmap(@"c:\TestPhoto.jpg");
    ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);

    // Create an Encoder object based on the GUID
    // for the Quality parameter category.
    System.Drawing.Imaging.Encoder myEncoder =
        System.Drawing.Imaging.Encoder.Quality;

    // Create an EncoderParameters object.
    // An EncoderParameters object has an array of EncoderParameter
    // objects. In this case, there is only one
    // EncoderParameter object in the array.
    EncoderParameters myEncoderParameters = new EncoderParameters(1);

    EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 
        50L);
    myEncoderParameters.Param[0] = myEncoderParameter;
    bmp1.Save(@"c:\TestPhotoQualityFifty.jpg", jgpEncoder, 
        myEncoderParameters);

    myEncoderParameter = new EncoderParameter(myEncoder, 100L);
    myEncoderParameters.Param[0] = myEncoderParameter;
    bmp1.Save(@"c:\TestPhotoQualityHundred.jpg", jgpEncoder, 
        myEncoderParameters);

    // Save the bitmap as a JPG file with zero quality level compression.
    myEncoderParameter = new EncoderParameter(myEncoder, 0L);
    myEncoderParameters.Param[0] = myEncoderParameter;
    bmp1.Save(@"c:\TestPhotoQualityZero.jpg", jgpEncoder, 
        myEncoderParameters);

}

private ImageCodecInfo GetEncoder(ImageFormat format)
{
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.FormatID == format.Guid)
        {
            return codec;
        }
    }
    return null;
}

Ссылка: http://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoderparameter. aspx

79
ответ дан 24 November 2019 в 16:13
поделиться

Ознакомьтесь со статьей MSDN , как установить уровень сжатия JPEG .

Вам необходимо использовать другую перегрузку Save (), которая принимает ImageEncoder и его параметры.

4
ответ дан 24 November 2019 в 16:13
поделиться
Другие вопросы по тегам:

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