1 // CoreUtil 2 // 3 // Copyright (C) 2012-2014 Daiyuu Nobori. All Rights Reserved. 4 // Copyright (C) 2012-2014 SoftEther VPN Project at University of Tsukuba. All Rights Reserved. 5 // 6 // License: The Apache License, Version 2.0 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // DISCLAIMER 10 // ========== 11 // 12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 13 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 15 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 16 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 17 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 18 // SOFTWARE. 19 // 20 // THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, UNDER 21 // JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, MERGE, PUBLISH, 22 // DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS SOFTWARE, THAT ANY 23 // JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS SOFTWARE OR ITS CONTENTS, 24 // AGAINST US (SOFTETHER PROJECT, SOFTETHER CORPORATION, DAIYUU NOBORI OR OTHER 25 // SUPPLIERS), OR ANY JURIDICAL DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND 26 // OF USING, COPYING, MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, 27 // AND/OR SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND 28 // CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO EXCLUSIVE 29 // JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, JAPAN. YOU MUST WAIVE 30 // ALL DEFENSES OF LACK OF PERSONAL JURISDICTION AND FORUM NON CONVENIENS. 31 // PROCESS MAY BE SERVED ON EITHER PARTY IN THE MANNER AUTHORIZED BY APPLICABLE 32 // LAW OR COURT RULE. 33 // 34 // USE ONLY IN JAPAN. DO NOT USE THIS SOFTWARE IN ANOTHER COUNTRY UNLESS YOU HAVE 35 // A CONFIRMATION THAT THIS SOFTWARE DOES NOT VIOLATE ANY CRIMINAL LAWS OR CIVIL 36 // RIGHTS IN THAT PARTICULAR COUNTRY. USING THIS SOFTWARE IN OTHER COUNTRIES IS 37 // COMPLETELY AT YOUR OWN RISK. THE SOFTETHER VPN PROJECT HAS DEVELOPED AND 38 // DISTRIBUTED THIS SOFTWARE TO COMPLY ONLY WITH THE JAPANESE LAWS AND EXISTING 39 // CIVIL RIGHTS INCLUDING PATENTS WHICH ARE SUBJECTS APPLY IN JAPAN. OTHER 40 // COUNTRIES' LAWS OR CIVIL RIGHTS ARE NONE OF OUR CONCERNS NOR RESPONSIBILITIES. 41 // WE HAVE NEVER INVESTIGATED ANY CRIMINAL REGULATIONS, CIVIL LAWS OR 42 // INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENTS IN ANY OF OTHER 200+ COUNTRIES 43 // AND TERRITORIES. BY NATURE, THERE ARE 200+ REGIONS IN THE WORLD, WITH 44 // DIFFERENT LAWS. IT IS IMPOSSIBLE TO VERIFY EVERY COUNTRIES' LAWS, REGULATIONS 45 // AND CIVIL RIGHTS TO MAKE THE SOFTWARE COMPLY WITH ALL COUNTRIES' LAWS BY THE 46 // PROJECT. EVEN IF YOU WILL BE SUED BY A PRIVATE ENTITY OR BE DAMAGED BY A 47 // PUBLIC SERVANT IN YOUR COUNTRY, THE DEVELOPERS OF THIS SOFTWARE WILL NEVER BE 48 // LIABLE TO RECOVER OR COMPENSATE SUCH DAMAGES, CRIMINAL OR CIVIL 49 // RESPONSIBILITIES. NOTE THAT THIS LINE IS NOT LICENSE RESTRICTION BUT JUST A 50 // STATEMENT FOR WARNING AND DISCLAIMER. 51 // 52 // READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. 53 // SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH 54 // LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. 55 // 56 // 57 // SOURCE CODE CONTRIBUTION 58 // ------------------------ 59 // 60 // Your contribution to SoftEther VPN Project is much appreciated. 61 // Please send patches to us through GitHub. 62 // Read the SoftEther VPN Patch Acceptance Policy in advance: 63 // http://www.softether.org/5-download/src/9.patch 64 // 65 // 66 // DEAR SECURITY EXPERTS 67 // --------------------- 68 // 69 // If you find a bug or a security vulnerability please kindly inform us 70 // about the problem immediately so that we can fix the security problem 71 // to protect a lot of users around the world as soon as possible. 72 // 73 // Our e-mail address for security reports is: 74 // softether-vpn-security [at] softether.org 75 // 76 // Please note that the above e-mail address is not a technical support 77 // inquiry address. If you need technical assistance, please visit 78 // http://www.softether.org/ and ask your question on the users forum. 79 // 80 // Thank you for your cooperation. 81 // 82 // 83 // NO MEMORY OR RESOURCE LEAKS 84 // --------------------------- 85 // 86 // The memory-leaks and resource-leaks verification under the stress 87 // test has been passed before release this source code. 88 89 90 using System; 91 using System.Threading; 92 using System.Data; 93 using System.Data.Sql; 94 using System.Data.SqlClient; 95 using System.Data.SqlTypes; 96 using System.Text; 97 using System.Configuration; 98 using System.Collections; 99 using System.Collections.Generic; 100 using System.Security.Cryptography; 101 using System.Web; 102 using System.Web.Security; 103 using System.Web.UI; 104 using System.Web.UI.WebControls; 105 using System.Web.UI.WebControls.WebParts; 106 using System.Web.UI.HtmlControls; 107 using System.IO; 108 using System.Drawing; 109 using System.Drawing.Imaging; 110 using System.Drawing.Drawing2D; 111 using System.Diagnostics; 112 using System.Web.Mail; 113 using System.Net; 114 using System.Net.Sockets; 115 using System.Net.NetworkInformation; 116 using System.Runtime.InteropServices; 117 118 namespace CoreUtil 119 { 120 public static class Bmp 121 { Load(string filename)122 public static Bitmap Load(string filename) 123 { 124 return Load(IO.ReadFile(filename)); 125 } Load(byte[] data)126 public static Bitmap Load(byte[] data) 127 { 128 MemoryStream ms = new MemoryStream(); 129 ms.Write(data, 0, data.Length); 130 ms.Seek(0, SeekOrigin.Begin); 131 132 return new Bitmap(ms); 133 } 134 SaveAsBitmap(Bitmap bmp, string filename)135 public static void SaveAsBitmap(Bitmap bmp, string filename) 136 { 137 IO.SaveFile(filename, SaveAsBitmap(bmp)); 138 } SaveAsBitmap(Bitmap bmp)139 public static byte[] SaveAsBitmap(Bitmap bmp) 140 { 141 MemoryStream ms = new MemoryStream(); 142 143 bmp.Save(ms, ImageFormat.Bmp); 144 145 return ms.ToArray(); 146 } 147 SaveAsJpeg(Bitmap bmp, string filename)148 public static void SaveAsJpeg(Bitmap bmp, string filename) 149 { 150 IO.SaveFile(filename, SaveAsJpeg(bmp)); 151 } SaveAsJpeg(Bitmap bmp)152 public static byte[] SaveAsJpeg(Bitmap bmp) 153 { 154 return SaveAsJpeg(bmp, 100); 155 } SaveAsJpeg(Bitmap bmp, string filename, int quality)156 public static void SaveAsJpeg(Bitmap bmp, string filename, int quality) 157 { 158 IO.SaveFile(filename, SaveAsJpeg(bmp, quality)); 159 } SaveAsJpeg(Bitmap bmp, int quality)160 public static byte[] SaveAsJpeg(Bitmap bmp, int quality) 161 { 162 EncoderParameters eps = new EncoderParameters(1); 163 EncoderParameter ep = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); 164 eps.Param[0] = ep; 165 166 ImageCodecInfo info = getEncoderInfo("image/jpeg"); 167 168 MemoryStream ms = new MemoryStream(); 169 bmp.Save(ms, info, eps); 170 171 return ms.ToArray(); 172 } 173 getEncoderInfo(string type)174 static ImageCodecInfo getEncoderInfo(string type) 175 { 176 ImageCodecInfo[] encs = ImageCodecInfo.GetImageEncoders(); 177 178 foreach (ImageCodecInfo enc in encs) 179 { 180 if (Str.StrCmpi(enc.MimeType, type)) 181 { 182 return enc; 183 } 184 } 185 186 return null; 187 } 188 ResizeBitmap(Bitmap bmp, int width, int height)189 public static Bitmap ResizeBitmap(Bitmap bmp, int width, int height) 190 { 191 Bitmap dst = new Bitmap(width, height, PixelFormat.Format24bppRgb); 192 Graphics g = Graphics.FromImage(dst); 193 g.SmoothingMode = SmoothingMode.HighQuality; 194 g.InterpolationMode = InterpolationMode.HighQualityBicubic; 195 196 Rectangle r = new Rectangle(0, 0, width, height); 197 198 g.DrawImage(bmp, r); 199 200 return dst; 201 } 202 } 203 } 204