Die Akzentfarbe von den Chatgruppen vom Server wird berücksichtigt. Bilder sind im richtigen Seitenverhältnis skaliert. Ein Bild, das man gerade erst verschickt hat und das man öffnen will, bevor es auf dem Server angekommen ist, wird jetzt erst angezeigt, sobald es auf dem Server ist. Die Textbox für eine neue Nachricht wird nur angezeigt, wenn eine Gruppe ausgewählt ist und wenn man das Recht hat Nachrichten an diese Gruppe zu verschicken. Diverse Codeverbesserungen.
132 lines
3.8 KiB
C#
132 lines
3.8 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
namespace ChatController.Utilities
|
|
{
|
|
public class FileUtils
|
|
{
|
|
public static string ScaleImage(string pFile, string pFormat, long maxUploadSize)
|
|
{
|
|
try
|
|
{
|
|
byte[] mediaFile;
|
|
using(Stream reader = File.OpenRead(pFile))
|
|
{
|
|
mediaFile = Utils.ReadFully(reader);
|
|
}
|
|
|
|
var memoryStream = new MemoryStream(mediaFile);
|
|
var image = Image.FromStream(memoryStream);
|
|
|
|
float width, height;
|
|
|
|
if(image.Height < image.Width)
|
|
{
|
|
if(image.Height > 1080)
|
|
{
|
|
var factor = (float)image.Height / 1080;
|
|
|
|
height = 1080;
|
|
|
|
width = image.Width / factor;
|
|
}
|
|
else
|
|
{
|
|
return pFile;
|
|
}
|
|
}
|
|
else if(image.Height < 1080 && image.Width < 1080)
|
|
{
|
|
return pFile;
|
|
}
|
|
else
|
|
{
|
|
if(image.Width > 1080)
|
|
{
|
|
var factor = (float)image.Width / 1080;
|
|
|
|
width = 1080;
|
|
|
|
height = image.Height / factor;
|
|
}
|
|
else
|
|
{
|
|
return pFile;
|
|
}
|
|
}
|
|
|
|
var scaledBitmap = new Bitmap(image, new Size((int)width, (int)height));
|
|
|
|
const int orientationId = 0x0112;
|
|
|
|
if(image.PropertyIdList.Contains(orientationId))
|
|
{
|
|
var item = image.GetPropertyItem(orientationId);
|
|
|
|
scaledBitmap.SetPropertyItem(item);
|
|
}
|
|
|
|
using(var graphics = Graphics.FromImage(image))
|
|
{
|
|
graphics.Clear(Color.Transparent);
|
|
|
|
graphics.InterpolationMode = InterpolationMode.Low;
|
|
|
|
graphics.DrawImage(scaledBitmap, (int)width, (int)height);
|
|
}
|
|
|
|
var filePath = Path.GetTempPath() + Guid.NewGuid() + pFormat;
|
|
|
|
if(pFormat.Equals(".JPG") || pFormat.Equals(".JPE") || pFormat.Equals(".JPEG") || pFormat.Equals(".BMP"))
|
|
{
|
|
scaledBitmap.Save(filePath, ImageFormat.Jpeg);
|
|
}
|
|
else if(pFormat.Equals(".PNG"))
|
|
{
|
|
scaledBitmap.Save(filePath, ImageFormat.Png);
|
|
}
|
|
else if(pFormat.Equals(".GIF"))
|
|
{
|
|
scaledBitmap.Save(filePath, ImageFormat.Gif);
|
|
}
|
|
|
|
if(File.Exists(filePath))
|
|
{
|
|
var fileInfo = new FileInfo(filePath);
|
|
var fileInfoLength = fileInfo.Length;
|
|
|
|
if(maxUploadSize < fileInfoLength)
|
|
{
|
|
File.Delete(filePath);
|
|
return string.Empty;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return string.Empty;
|
|
}
|
|
|
|
memoryStream.Dispose();
|
|
memoryStream.Close();
|
|
|
|
return filePath;
|
|
}
|
|
catch(Exception exception)
|
|
{
|
|
return pFile;
|
|
}
|
|
}
|
|
|
|
public static bool CheckFileSize(string pathToFile, long maxFileSize)
|
|
{
|
|
var fileInfo = new FileInfo(pathToFile);
|
|
|
|
return fileInfo.Length > maxFileSize;
|
|
}
|
|
}
|
|
}
|