изменение размера картинки

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
нашел на этом форуме сниппет по изменению картинки(не помню тему где нашел, по этому спрашиваю тут.. прошу админов сильно не пинать)
Код:
 Func<int,int,string,Image> displayHex = delegate(int newWidth, int newHeight, string stPhotoPath)
            {
                Image imgPhoto = Image.FromFile(stPhotoPath);

                int sourceWidth = imgPhoto.Width;
                int sourceHeight = imgPhoto.Height;

                //Consider vertical pics
                if (sourceWidth < sourceHeight)
                {
                    int buff = newWidth;

                    newWidth = newHeight;
                    newHeight = buff;
                }

                int sourceX = 0, sourceY = 0, destX = 0, destY = 0;
                float nPercent = 0, nPercentW = 0, nPercentH = 0;

                nPercentW = ((float)newWidth / (float)sourceWidth);
                nPercentH = ((float)newHeight / (float)sourceHeight);
                if (nPercentH < nPercentW)
                {
                    nPercent = nPercentH;
                    destX = System.Convert.ToInt16((newWidth -
                              (sourceWidth * nPercent)) / 2);
                }
                else
                {
                    nPercent = nPercentW;
                    destY = System.Convert.ToInt16((newHeight -
                              (sourceHeight * nPercent)) / 2);
                }

                int destWidth = (int)(sourceWidth * nPercent);
                int destHeight = (int)(sourceHeight * nPercent);


                Bitmap bmPhoto = new Bitmap(newWidth, newHeight,
                              PixelFormat.Format24bppRgb);

                bmPhoto.SetResolution(imgPhoto.HorizontalResolution,
                             imgPhoto.VerticalResolution);

                Graphics grPhoto = Graphics.FromImage(bmPhoto);
                grPhoto.Clear(Color.Black);
                grPhoto.InterpolationMode =
                    InterpolationMode.HighQualityBicubic;

                grPhoto.DrawImage(imgPhoto,
                    new Rectangle(destX, destY, destWidth, destHeight),
                    new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
                    GraphicsUnit.Pixel);

                grPhoto.Dispose();
                imgPhoto.Dispose();
                return bmPhoto;
            };

            var x = displayHex(600, 500, "D:\\123.jpg");
            x.Save("D:\\123_new.jpg");
нашел давно, но как то не нужен был, положил в копилку, но сегодня понадобился.. и сразу возник вопрос:
Код:
            var x = displayHex(600, 500, "D:\\123.jpg");
            x.Save("D:\\123_new.jpg");
как правильно настроить пути к картинкам?? делаю так:
Код:
            var x = displayHex(600, 500, "D:\\images\project.Variables["id"].Value.jpg");
            x.Save("D:\\images1\project.Variables["id"].Value_new.jpg");
выдает ошибку.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
На следующей неделе будет новый билд с новой функцией работы с графикой . Подождите еще чутка)
вотермарки, изменение размеров, повороты, вот это все)

upload_2015-4-24_11-48-58.png
 

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
На следующей неделе будет новый билд с новой функцией работы с графикой . Подождите еще чутка)
вотермарки, изменение размеров, повороты, вот это все)

Посмотреть вложение 7975
а косяки предыдущего билда (я про многопоточность) исправили??... а то из за этих косяков пришлось откатиться на предыдущий билд...
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 264
Баллы
113
Код мой) Путь надо прокладывать так. Надо
C#:
var x = displayHex(600, 500, "D:\\images\"+project.Variables["id"].Value+".jpg");
x.Save("D:\\images1\"+project.Variables["id"].Value_new+".jpg");
 
  • Спасибо
Реакции: blud

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
а косяки предыдущего билда (я про многопоточность) исправили??... а то из за этих косяков пришлось откатиться на предыдущий билд...
а вы показывали проблему? писать то писали но пока толком ни одного нормального примера по тимвьюеру я не видел(
 
  • Спасибо
Реакции: APXOHT

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
Код мой) Путь надо прокладывать так. Надо
C#:
var x = displayHex(600, 500, "D:\\images\"+project.Variables["id"].Value+".jpg");
x.Save("D:\\images1\"+project.Variables["id"].Value_new+".jpg");
спасибо за код.. и за ответ ...
и сразу возник еще один вопрос(как к автору кода):
а можно сделать так, что бы указывать к примеру только желаемую ширину картинки, а высота изменялась пропорционально???
 

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
Код мой) Путь надо прокладывать так. Надо
C#:
var x = displayHex(600, 500, "D:\\images\"+project.Variables["id"].Value+".jpg");
x.Save("D:\\images1\"+project.Variables["id"].Value_new+".jpg");
выдает ошибку: "Символ новой строки в константе"
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 264
Баллы
113
проблема в переменной id. что в ней содержится
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 264
Баллы
113
  1. var x = displayHex(600, 500, "D:\\images\"+project.Variables["id"].Value.Trim()+".jpg");
  2. x.Save("D:\\images1\"+project.Variables["id"].Value.Trim()+".jpg");
 

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 264
Баллы
113
Напиши в скайп. Помогу
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)