Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сохранить в jpeg без потери качества 
:(
    Опции темы
cromm3
Дата 22.7.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 22.3.2006

Репутация: нет
Всего: нет



Всем привет!)) примерно так работаю с рисунками:
Код

System.Drawing.Bitmap image = new Bitmap(Server.MapPath("sce.jpg"));
        image.RotateFlip(RotateFlipType.Rotate90FlipNone);
        Graphics g = Graphics.FromImage(image);
        MemoryStream ms = new MemoryStream();
        FileStream fs = File.OpenWrite(Server.MapPath("sce.jpg"));
        ms.WriteTo(fs);
        fs.Flush();
        fs.Close();
        image.Save(ms, ImageFormat.Jpeg);
        g.Dispose();
        image.Dispose();

как можно сохранять в jpeg без потери качества?

спасибо!))
PM   Вверх
_hunter
Дата 23.7.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



jpeg'ов без потери качества небывает.
есть, вроде, jpeg2000, но это уже совсем другая история (не факт что они выпускают .NET кодеры)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Rififi
Дата 23.7.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



image.RotateFlip(RotateFlipType.Rotate90FlipNone);
нужен именно "настоящий" поворот, exif-тэг orientation не катит?
я вроде слышал какие-то слухи о возможности lossless-поворота на углы, кратные 90, но подробностями не интересовался.
PM MAIL   Вверх
cromm3
Дата 23.7.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 22.3.2006

Репутация: нет
Всего: нет



значит проблема почти не решается, на данный момент...
все равно спасибо))
PM   Вверх
Ctrl
Дата 23.7.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 12.2.2008
Где: Tula

Репутация: 6
Всего: 7



Вот пример, который возможно поможет...
Идея в том что контролировать уровень качества при сохранении  в Jpeg
все-таки можно (дефолтный уровень соответствует 75%)

Код

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

namespace SimpleJpegConverterTest {
    class Program {
        static void Main(string[] args) {
            using(Bitmap image = new Bitmap(@"d:\source.bmp")) {
                JpegImageHelper.SaveImageToFile(image, @"d:\target-25.jpg", 0.25f);  //Quality Level 25%
                JpegImageHelper.SaveImageToFile(image, @"d:\target-50.jpg", 0.5f);   //Quality Level 50%
                JpegImageHelper.SaveImageToFile(image, @"d:\target-75.jpg", 0.75f);  //Quality Level 75%
                JpegImageHelper.SaveImageToFile(image, @"d:\target-100.jpg", 1.00f); //Quality Level 100%
            }
        }
        public class JpegImageHelper {
            static ImageCodecInfo imageCodecInfo;
            static JpegImageHelper() {
                imageCodecInfo = GetEncoderInfo("image/jpeg");
            }
            public static void SaveImageToStream(Image image, Stream stream, float qualityFactor) {
                EncoderParameters codecParams = CreateEncoderParameter_Quality(qualityFactor);
                image.Save(stream, imageCodecInfo, codecParams);
            }
            public static void SaveImageToFile(Image image, string path, float qualityFactor) {
                EncoderParameters codecParams = CreateEncoderParameter_Quality(qualityFactor);
                image.Save(path, imageCodecInfo, codecParams);
            }
            static EncoderParameters CreateEncoderParameter_Quality(float qualityFactor) {
                EncoderParameters codecParams = new EncoderParameters(1);
                long qualityValue = Math.Min((long)(100f * qualityFactor), 100L);
                codecParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityValue);
                return codecParams;
            }
            static ImageCodecInfo GetEncoderInfo(String mimeType) {
                ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
                for(int i = 0; i < encoders.Length; i++) {
                    if(encoders[i].MimeType == mimeType) return encoders[i];
                }
                return null;
            }
        }
    }
}

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.