//--Главная страница. Выводит список картинок-------------------------------------------------------- public ActionResult Index(int page = 1, int limit = 7, int size = 320) { var images = repository.Load(); images = images.OrderByDescending(b => b.date); //--сортируем по индексу-- int h1, h2, h3 , hMin; //--переменные для ------------------- h1 = h2 = h3 = hMin = 0; //--вычисления лишней части картинок-- var imageList = images.ToPagedList(page, 3 * limit); ImageProperties[] imagePrArray = new ImageProperties[imageList.Count]; int k = 0; //--Вычисляем размеры ресайза-- foreach (var obj in imageList) { if(obj.width >= size) imagePrArray[k++] = new ImageProperties(obj.ImageID, size, (obj.height * size) / (obj.width)); if (obj.width < size) imagePrArray[k++] = new ImageProperties(obj.ImageID, (obj.width * size) / (obj.height), size); } //--Суммируем ширину изображений каждой колонки-- for (int i = 0; i < imagePrArray.Length; i += 3) { h1 += imagePrArray[i].resizeHeight; if (i + 1 < imagePrArray.Length) h2 += imagePrArray[i + 1].resizeHeight; if (i + 2 < imagePrArray.Length) h3 += imagePrArray[i + 2].resizeHeight; } //--Вычисляем эталонную ширину колоннки-- hMin = Math.Min(h1, Math.Min(h2, h3)); //--Вычисляем данные для обрезки картинок-- for (int i = 0; i < imagePrArray.Length; i += 3) { imagePrArray[i].cropHeight = (int)Math.Round((double)(h1-hMin) / (limit * 2.0)); if (i + 1 < imagePrArray.Length) imagePrArray[i + 1].cropHeight = (int)Math.Round((double)(h2 - hMin) / (limit * 2.0)); if (i + 2 < imagePrArray.Length) imagePrArray[i + 2].cropHeight = (int)Math.Round((double)(h3 - hMin) / (limit * 2.0)); } //--Передаем данные представлению-- ViewBag.page = page; ViewBag.limit = limit; ViewBag.count = images.Count(); ViewBag.size = size; return View(imagePrArray); }
//--------------------------------------------------------------------------------------------------- //--Страница для просмотра отдельной картинки вместе с рекламой-------------------------------------- public ActionResult ViewImage(int id, int rWidth = 520, int rHeight = 520, int limit = 3, int size = 140) { var images = repository.Load(); ImageProperties[] imagePrArray = new ImageProperties[3 * limit]; int k = 0; Random rand = new Random(); //--Вычисляем как нужно обрезать картинку, чтобы она поместилась в квадрат-- for (int i = 0; i < 3 * limit; ++i) { int randN = rand.Next(1, images.Count()); //--выбираем рандомные картинки-- if (images.ToArray()[randN].width >= images.ToArray()[randN].height) imagePrArray[k++] = new ImageProperties( images.ToArray()[randN].ImageID, (images.ToArray()[randN].width * size) / (images.ToArray()[randN].height), size, (int)Math.Round(((double)((images.ToArray()[randN].width * size) / (images.ToArray()[randN].height)) - size)/2.0), 0); if (images.ToArray()[randN].width < images.ToArray()[randN].height) imagePrArray[k++] = new ImageProperties( images.ToArray()[randN].ImageID, size, (images.ToArray()[randN].height * size) / (images.ToArray()[randN].width), 0, (int)Math.Round(((double)((images.ToArray()[randN].height * size) / (images.ToArray()[randN].width)) - size)/2.0)); } //--Передаем данные представлению-- ViewBag.id = id; ViewBag.rWidth = rWidth; ViewBag.rHeight = rHeight; ViewBag.limit = limit; ViewBag.size = size; return View(imagePrArray); }