public void Assign_Mark() { var position = new MarkPosition(1, 1); _board.AssignMark(_player1.Object, position); _board.GetMarkPosition(position).Should().Be(MarkTypeEnum.Cross); }
/// <summary> /// 添加水印文字 /// </summary> /// <param name="markString">水印文字</param> /// <param name="font">字段</param> /// <param name="markPosition">位置</param> /// <param name="margin">边距</param> public void DrawMarkString(string markString, Font font, MarkPosition markPosition, int margin = 10) { using (Graphics g = Graphics.FromImage(this.bitmap)) { g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; var sizeF = g.MeasureString(markString, font); // 文本区域大小 var objectSize = new Size((int)sizeF.Width, (int)sizeF.Height); // 绘制水印的左上角点 var point = this.GetObjectDrawPoint(objectSize, markPosition, margin); #region 计算文本的颜色 var centerP = new Point(point.X + objectSize.Width / 2, point.Y - objectSize.Height / 2); var backColor = Color.White; var rect = new Rectangle(Point.Empty, this.bitmap.Size); if (rect.Contains(centerP)) { backColor = this.bitmap.GetPixel(centerP.X, centerP.Y); } var foreColor = Color.FromArgb(255 - backColor.R, 255 - backColor.G, 255 - backColor.B); #endregion g.DrawString(markString, font, new SolidBrush(foreColor), point); } }
/// <summary> /// 获取绘制物体的八绘制左上角点坐标 /// </summary> /// <param name="objectSize">物体大小</param> /// <param name="markPosition">水印位置</param> /// <param name="margin">外边距</param> /// <returns></returns> private Point GetObjectDrawPoint(Size objectSize, MarkPosition markPosition, int margin) { Point p = Point.Empty; switch (markPosition) { case MarkPosition.BottomLeft: p.X = margin; p.Y = this.bitmap.Height - objectSize.Height - margin; break; case MarkPosition.BottomRight: p.X = this.bitmap.Width - objectSize.Width - margin; p.Y = this.bitmap.Height - objectSize.Height - margin; break; case MarkPosition.TopLeft: p.X = margin; p.Y = margin; break; case MarkPosition.TopRiht: p.X = this.bitmap.Width - objectSize.Width - margin; p.Y = margin; break; case MarkPosition.Center: p.X = this.bitmap.Width / 2 - objectSize.Width / 2; p.Y = this.bitmap.Height / 2 - objectSize.Height / 2; break; } return(p); }
public void Not_Assign_Mark_In_Place_With_Other_Mark() { var position = new MarkPosition(1, 1); _board.AssignMark(_player1.Object, position); _board.AssignMark(_player2.Object, position); _board.GetMarkPosition(position).Should().Be(MarkTypeEnum.Cross); }
/// <summary> /// 给图片添加图片水印 /// </summary> /// <param name="sourcePath">源图片的存储地址</param> /// <param name="watermarkPath">水印图片的物理地址</param> /// <param name="saveFilePath">目标图片的存储地址</param> /// <param name="mp">水印位置</param> public static void AddPicWatermarkAsJPG(string sourcePath, string watermarkPath, string saveFilePath, MarkPosition mp) { if (File.Exists(sourcePath)) { using (StreamReader sr = new StreamReader(sourcePath)) { AddPicWatermarkAsJPG(sr.BaseStream, watermarkPath, saveFilePath, mp); } } }
public bool AssignMark(IPlayer player, MarkPosition markPosition) { if (marksList.GetMarkPosition(markPosition) == MarkTypeEnum.Empty) { marksList.SetMarkPosition(markPosition, player.MarkType); ++MarkCount; return(true); } return(false); }
/// <summary> /// 绘制图片水印 /// </summary> /// <param name="markImageFullName">水印图片文件名</param> /// <param name="markPosition">水印位置</param> /// <param name="margin">外边距</param> public void DrawMarkImage(string markImageFullName, MarkPosition markPosition, int margin = 10) { using (Graphics g = Graphics.FromImage(this.bitmap)) { using (var image = new Bitmap(new MemoryStream(File.ReadAllBytes(markImageFullName)))) { // 绘制水印的左上角点 var point = this.GetObjectDrawPoint(image.Size, markPosition, margin); g.DrawImage(image, point); } } }
/// <summary> /// 给图片添加图片水印 /// </summary> /// <param name="inputStream">包含要源图片的流</param> /// <param name="watermarkPath">水印图片的物理地址</param> /// <param name="saveFilePath">目标图片的存储地址</param> /// <param name="mp">水印位置</param> public static void AddPicWatermarkAsJPG(Stream inputStream, string watermarkPath, string saveFilePath, MarkPosition mp) { Image image = Image.FromStream(inputStream); Bitmap b = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(b); g.Clear(Color.White); g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.High; g.DrawImage(image, 0, 0, image.Width, image.Height); AddWatermarkImage(g, watermarkPath, mp, image.Width, image.Height); try { CompressAsJPG(b, saveFilePath, 80); } catch { ;} finally { b.Dispose(); image.Dispose(); } }
public void addMarkToCell(Cell cell, MarkPosition position) { Mark mark = Instantiate(markPrefab); mark.transform.SetParent(cell.transform); switch (position) { case MarkPosition.UP: mark.transform.localPosition = new Vector3(halfSize, baseSize, 0); mark.transform.localRotation = Quaternion.Euler(0, 0, 90); cell.up_mark = mark; break; case MarkPosition.DOWN: mark.transform.localPosition = new Vector3(halfSize, 0, 0); mark.transform.localRotation = Quaternion.Euler(0, 0, 90); cell.down_mark = mark; break; case MarkPosition.LEFT: mark.transform.localPosition = new Vector3(0, halfSize, 0); cell.left_mark = mark; break; case MarkPosition.RIGHT: mark.transform.localPosition = new Vector3(baseSize, halfSize, 0); cell.right_mark = mark; break; } if (!allMarks.Contains(mark)) { allMarks.Add(mark); } }
/// <summary> /// 给图片添加文字水印 /// </summary> /// <param name="sourcePath">源图片的存储地址</param> /// <param name="text">水印文字</param> /// <param name="saveFilePath">目标图片的存储地址</param> /// <param name="mp">水印位置</param> public static void AddTextWatermarkAsJPG(string sourcePath, string text, string saveFilePath, MarkPosition mp) { if (File.Exists(sourcePath)) { using (StreamReader sr = new StreamReader(sourcePath)) { AddTextWatermarkAsJPG(sr.BaseStream, text, saveFilePath, mp); } } }
/// <summary> /// 给图片添加文字水印 /// </summary> /// <param name="inputStream">包含要源图片的流</param> /// <param name="text">水印文字</param> /// <param name="saveFilePath">目标图片的存储地址</param> /// <param name="mp">水印位置</param> public static void AddTextWatermarkAsJPG(Stream inputStream, string text, string saveFilePath, MarkPosition mp) { Image image = Image.FromStream(inputStream); Bitmap b = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(b); g.Clear(Color.White); g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.High; g.DrawImage(image, 0, 0, image.Width, image.Height); AddWatermarkText(g, text, mp, image.Width, image.Height); try { CompressAsJPG(b, saveFilePath, 80); } catch { throw new Exception("图片压缩数据有问题"); } finally { b.Dispose(); image.Dispose(); } }
/// <summary> /// 从内存中创建水印图片 /// </summary> /// <param name="inputStream">包含要源图片的流</param> /// <param name="watermarkPath">水印图片的物理地址</param> /// <param name="saveFilePath">目标图片的存储地址</param> /// <param name="mp">水印位置</param> public static Bitmap AddStreamWatermarkAsJPG(Stream inputStream, string watermarkPath, MarkPosition mp) { Image image = Image.FromStream(inputStream); { Bitmap b = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb); { using (Graphics g = Graphics.FromImage(b)) { //g.Clear(Color.White); g.Clear(Color.Transparent); g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.High; g.DrawImage(image, 0, 0, image.Width, image.Height); AddWatermarkImage(g, watermarkPath, mp, image.Width, image.Height); return(b); } } } }
/// <summary> /// 添加文字水印 /// </summary> /// <param name="picture">要加水印的原图像</param> /// <param name="text">水印文字</param> /// <param name="mp">添加的位置</param> /// <param name="width">原图像的宽度</param> /// <param name="height">原图像的高度</param> private static void AddWatermarkText(Graphics picture, string text, MarkPosition mp, int width, int height) { int[] sizes = new int[] { 16, 14, 12, 10, 8, 6, 4 }; Font crFont = null; SizeF crSize = new SizeF(); for (int i = 0; i < 7; i++) { crFont = new Font("Arial", sizes[i], FontStyle.Bold); crSize = picture.MeasureString(text, crFont); if ((ushort)crSize.Width < (ushort)width) break; } float xpos = 0; float ypos = 0; switch (mp) { case MarkPosition.MP_Left_Top: xpos = ((float)width * (float).01) + (crSize.Width / 2); ypos = (float)height * (float).01; break; case MarkPosition.MP_Right_Top: xpos = ((float)width * (float).99) - (crSize.Width / 2); ypos = (float)height * (float).01; break; case MarkPosition.MP_Right_Bottom: xpos = ((float)width * (float).99) - (crSize.Width / 2); ypos = ((float)height * (float).99) - crSize.Height; break; case MarkPosition.MP_Left_Bottom: xpos = ((float)width * (float).01) + (crSize.Width / 2); ypos = ((float)height * (float).99) - crSize.Height; break; } StringFormat StrFormat = new StringFormat(); StrFormat.Alignment = StringAlignment.Center; SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(150, 0, 0, 0)); picture.DrawString(text, crFont, semiTransBrush2, xpos + 1, ypos + 1, StrFormat); SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(150, 127, 127, 127)); picture.DrawString(text, crFont, semiTransBrush, xpos, ypos, StrFormat); semiTransBrush2.Dispose(); semiTransBrush.Dispose(); }
public MarkTypeEnum GetMarkPosition(MarkPosition markPosition) => marksList.GetMarkPosition(markPosition);
internal static Diagram GetDiagram(Chord chord, ChordOptions chordOptions, DiagramStyle parentStyle) { if (null == chord) { throw new ArgumentNullException(nameof(chord)); } if (null == chordOptions) { throw new ArgumentNullException(nameof(chordOptions)); } if (null == parentStyle) { throw new ArgumentNullException(nameof(parentStyle)); } Diagram diagram = new Diagram(parentStyle, chord.NumStrings, chord.NumFrets); // Setup base diagram.Style.Orientation = DiagramOrientation.UpDown; diagram.Style.LabelLayoutModel = DiagramLabelLayoutModel.AddPaddingVertical; diagram.Style.DiagramColor = "White"; diagram.Style.DiagramOpacity = 0; diagram.Style.DiagramBorderColor = "Black"; diagram.Style.DiagramBorderThickness = 0; // Process title diagram.Title = chord.Title; diagram.Style.TitleLabelStyle = DiagramLabelStyle.ChordName; diagram.Style.TitleTextSize = chordOptions.FontSize * (19.0 / 24.0); diagram.Style.TitleVisible = true; diagram.Style.TitleTextSizeModRatio = 0.75; diagram.Style.TitleGridPadding = diagram.Style.TitleTextSize / 2.0; diagram.Style.TitleFontFamily = chordOptions.FontFamily; diagram.Style.TitleColor = "Black"; diagram.Style.TitleOpacity = 1; diagram.Style.TitleTextAlignment = DiagramHorizontalAlignment.Center; // Process grid double margin = chordOptions.Margin; diagram.Style.GridMargin = margin; diagram.Style.GridMarginLeft = margin; diagram.Style.GridMarginRight = margin; diagram.Style.GridMarginTop = margin; diagram.Style.GridMarginBottom = margin; double titleHeight = diagram.Style.TitleTextSize; double rectWidth = chordOptions.Width - (2.0 * chordOptions.Margin); double rectHeight = chordOptions.Height - titleHeight - (2.0 * chordOptions.Margin); diagram.Style.GridLineThickness = chordOptions.StrokeWidth; diagram.Style.GridStringSpacing = rectWidth / (chord.NumStrings - 1); diagram.Style.GridFretSpacing = rectHeight / chord.NumFrets; diagram.Style.GridLineColor = "White"; diagram.Style.GridOpacity = 0; diagram.Style.GridLineColor = "Black"; DiagramTextStyle titleTextStyle = DiagramTextStyle.Regular; switch (chordOptions.FontStyle) { case FontStyle.Bold: titleTextStyle = DiagramTextStyle.Bold; break; case FontStyle.Italic: titleTextStyle = DiagramTextStyle.Italic; break; case FontStyle.BoldItalic: titleTextStyle = DiagramTextStyle.BoldItalic; break; } diagram.Style.TitleTextStyle = titleTextStyle; // Process marks DiagramMarkStyleWrapper dmsw = new DiagramMarkStyleWrapper(diagram.Style); dmsw.MarkType = DiagramMarkType.Normal; dmsw.MarkVisible = true; dmsw.MarkRadiusRatio = 0.67; dmsw.MarkShape = DiagramMarkShape.Circle; dmsw.MarkBorderThickness = 2; dmsw.MarkColor = "Black"; dmsw.MarkOpacity = 1.0; dmsw.MarkBorderColor = "Black"; dmsw.MarkType = DiagramMarkType.Muted; dmsw.MarkVisible = true; dmsw.MarkRadiusRatio = 0.33; dmsw.MarkShape = DiagramMarkShape.X; dmsw.MarkBorderThickness = 2; dmsw.MarkColor = "Black"; dmsw.MarkOpacity = 1.0; dmsw.MarkBorderColor = "Black"; dmsw.MarkType = DiagramMarkType.Open; bool openCircle = (chordOptions.OpenStringType == OpenStringType.Circle); dmsw.MarkVisible = openCircle; dmsw.MarkRadiusRatio = 0.33; dmsw.MarkShape = openCircle ? DiagramMarkShape.Circle : DiagramMarkShape.None; dmsw.MarkBorderThickness = 2; dmsw.MarkColor = "White"; dmsw.MarkOpacity = 1.0; dmsw.MarkBorderColor = "Black"; for (int str = 0; str < chord.Marks.Length; str++) { int fret = chord.Marks[str]; MarkPosition mp = new MarkPosition(str + 1, Math.Max(fret, 0)); if (fret == -1) { DiagramMark mutedMark = diagram.NewMark(mp); mutedMark.Type = DiagramMarkType.Muted; } else if (fret == 0 && openCircle) { DiagramMark openMark = diagram.NewMark(mp); openMark.Type = DiagramMarkType.Open; } else if (fret > 0) { diagram.NewMark(mp); } } diagram.Style.BarreVisible = true; diagram.Style.BarreVerticalAlignment = DiagramVerticalAlignment.Middle; diagram.Style.BarreArcRatio = 0.5; diagram.Style.BarreStack = DiagramBarreStack.UnderMarks; diagram.Style.BarreOpacity = 1.0; diagram.Style.BarreLineColor = "Black"; diagram.Style.BarreLineThickness = 2.0; // Process barres if (chordOptions.BarreType == BarreType.None) { diagram.Style.BarreVisible = false; } BarrePosition bp = MarkUtils.AutoBarrePosition(chord.Marks); if (chord.Barre == -1) { if (chordOptions.FullBarres && null != bp) { bp = new BarrePosition(bp.Fret, 1, chord.NumStrings); } } else if (chord.Barre == 0) { bp = null; } else if (chord.Barre > 0) { if (null != bp) { if (chordOptions.FullBarres) { bp = new BarrePosition(bp.Fret, 1, chord.NumStrings); } else { bp = new BarrePosition(chord.Barre, bp.StartString, bp.EndString); } } } if (chordOptions.FullBarres && null != bp) { bp = new BarrePosition(bp.Fret, 1, chord.NumStrings); } if (null != bp) { if (chordOptions.BarreType == BarreType.Straight) { DiagramBarre straightBarre = diagram.NewBarre(bp); straightBarre.Style.BarreArcRatio = 0; } else if (chordOptions.BarreType == BarreType.Arc) { diagram.NewBarre(bp); } } // Process baseline / fret marker diagram.Style.GridNutVisible = false; diagram.Style.GridNutRatio = 2.0; diagram.Style.FretLabelTextVisible = true; diagram.Style.FretLabelTextAlignment = DiagramHorizontalAlignment.Left; diagram.Style.FretLabelTextSizeRatio = 0.6; diagram.Style.FretLabelTextWidthRatio = 0.5; diagram.Style.FretLabelTextStyle = DiagramTextStyle.Regular; diagram.Style.FretLabelGridPadding = margin / 4.0; diagram.Style.FretLabelTextColor = "Black"; diagram.Style.FretLabelTextOpacity = 1.0; diagram.Style.FretLabelFontFamily = chordOptions.FontFamily; int baseLine = chord.BaseLine; if (baseLine == 0) { diagram.Style.GridNutVisible = true; } else if (chord.BaseLine > 1) { FretLabelPosition flp = new FretLabelPosition(FretLabelSide.Right, 1); diagram.NewFretLabel(flp, baseLine.ToString()); } return(diagram); }
/// <summary> /// 添加文字水印 /// </summary> /// <param name="picture">要加水印的原图像</param> /// <param name="text">水印文字</param> /// <param name="mp">添加的位置</param> /// <param name="width">原图像的宽度</param> /// <param name="height">原图像的高度</param> private static void AddWatermarkText(Graphics picture, string text, MarkPosition mp, int width, int height) { int[] sizes = new int[] { 16, 14, 12, 10, 8, 6, 4 }; Font crFont = null; SizeF crSize = new SizeF(); for (int i = 0; i < 7; i++) { crFont = new Font("Arial", sizes[i], FontStyle.Bold); crSize = picture.MeasureString(text, crFont); if ((ushort)crSize.Width < (ushort)width) { break; } } float xpos = 0; float ypos = 0; switch (mp) { case MarkPosition.MP_Left_Top: xpos = ((float)width * (float).01) + (crSize.Width / 2); ypos = (float)height * (float).01; break; case MarkPosition.MP_Right_Top: xpos = ((float)width * (float).99) - (crSize.Width / 2); ypos = (float)height * (float).01; break; case MarkPosition.MP_Right_Bottom: xpos = ((float)width * (float).99) - (crSize.Width / 2); ypos = ((float)height * (float).99) - crSize.Height; break; case MarkPosition.MP_Left_Bottom: xpos = ((float)width * (float).01) + (crSize.Width / 2); ypos = ((float)height * (float).99) - crSize.Height; break; case MarkPosition.MP_Middle: xpos = ((float)width / 2); ypos = ((float)height / 2); break; } StringFormat StrFormat = new StringFormat(); StrFormat.Alignment = StringAlignment.Center; SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0)); picture.DrawString(text, crFont, semiTransBrush2, xpos + 1, ypos + 1, StrFormat); SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255)); picture.DrawString(text, crFont, semiTransBrush, xpos, ypos, StrFormat); semiTransBrush2.Dispose(); semiTransBrush.Dispose(); }
/// <summary> /// 添加图片水印 /// </summary> /// <param name="picture">要加水印的原图像</param> /// <param name="waterMarkPath">水印文件的物理地址</param> /// <param name="mp">添加的位置</param> /// <param name="width">原图像的宽度</param> /// <param name="height">原图像的高度</param> private static void AddWatermarkImage(Graphics picture, string waterMarkPath, MarkPosition mp, int width, int height) { Image watermark = new Bitmap(waterMarkPath); ImageAttributes imageAttributes = new ImageAttributes(); ColorMap colorMap = new ColorMap(); colorMap.OldColor = Color.FromArgb(255, 0, 255, 0); colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); ColorMap[] remapTable = { colorMap }; imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float[][] colorMatrixElements = { new float[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, new float[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }, new float[] { 0.0f, 0.0f, 0.0f, 0.3f, 0.0f }, new float[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } }; ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements); imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); int xpos = 0; int ypos = 0; int markWidth = 0; int markHeight = 0; double bl = 1d; if ((width > watermark.Width * 4) && (height > watermark.Height * 4)) { bl = 1; } else if ((width > watermark.Width * 4) && (height < watermark.Height * 4)) { bl = Convert.ToDouble(height / 4) / Convert.ToDouble(watermark.Height); } else if ((width < watermark.Width * 4) && (height > watermark.Height * 4)) { bl = Convert.ToDouble(width / 4) / Convert.ToDouble(watermark.Width); } else { if ((width * watermark.Height) > (height * watermark.Width)) { bl = Convert.ToDouble(height / 4) / Convert.ToDouble(watermark.Height); } else { bl = Convert.ToDouble(width / 4) / Convert.ToDouble(watermark.Width); } } markWidth = Convert.ToInt32(watermark.Width * bl); markHeight = Convert.ToInt32(watermark.Height * bl); switch (mp) { case MarkPosition.MP_Left_Top: int x = (width - markWidth) / 2 - 200; int y = (height - markHeight) / 2 - 500; if (x < 0) { x = 100; } if (y < 0) { y = 300; } xpos = x; ypos = y; break; case MarkPosition.MP_Right_Top: xpos = width - markWidth - 10; ypos = 10; break; case MarkPosition.MP_Right_Bottom: xpos = width - markWidth - 10; ypos = height - markHeight - 10; break; case MarkPosition.MP_Left_Bottom: xpos = 10; ypos = height - markHeight - 10; break; case MarkPosition.MP_Middle: xpos = (width - markWidth) / 2; ypos = (height - markHeight) / 2; break; } picture.DrawImage(watermark, new Rectangle(xpos, ypos, markWidth, markHeight), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes); watermark.Dispose(); imageAttributes.Dispose(); }
/// <summary> /// 添加图片水印 /// </summary> /// <param name="picture">要加水印的原图像</param> /// <param name="waterMarkPath">水印文件的物理地址</param> /// <param name="mp">添加的位置</param> /// <param name="width">原图像的宽度</param> /// <param name="height">原图像的高度</param> private static void AddWatermarkImage(Graphics picture, string waterMarkPath, MarkPosition mp, int width, int height) { Image watermark = new Bitmap(waterMarkPath); ImageAttributes imageAttributes = new ImageAttributes(); ColorMap colorMap = new ColorMap(); colorMap.OldColor = Color.FromArgb(150, 0, 127, 0); colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); ColorMap[] remapTable = { colorMap }; imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float[][] colorMatrixElements = { new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, new float[] {0.0f, 0.0f, 0.0f, 0.3f, 0.0f}, new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f} }; ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements); imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); int xpos = 0; int ypos = 0; int WatermarkWidth = 0; int WatermarkHeight = 0; double bl = 1d; if ((width > watermark.Width * 4) && (height > watermark.Height * 4)) { bl = 1; } else if ((width > watermark.Width * 4) && (height < watermark.Height * 4)) { bl = Convert.ToDouble(height / 4) / Convert.ToDouble(watermark.Height); } else if ((width < watermark.Width * 4) && (height > watermark.Height * 4)) { bl = Convert.ToDouble(width / 4) / Convert.ToDouble(watermark.Width); } else { if ((width * watermark.Height) > (height * watermark.Width)) { bl = Convert.ToDouble(height / 4) / Convert.ToDouble(watermark.Height); } else { bl = Convert.ToDouble(width / 4) / Convert.ToDouble(watermark.Width); } } WatermarkWidth = Convert.ToInt32(watermark.Width * bl); WatermarkHeight = Convert.ToInt32(watermark.Height * bl); switch (mp) { case MarkPosition.MP_Left_Top: xpos = 10; ypos = 10; break; case MarkPosition.MP_Right_Top: xpos = width - WatermarkWidth - 10; ypos = 10; break; case MarkPosition.MP_Right_Bottom: xpos = width - WatermarkWidth - 10; ypos = height - WatermarkHeight - 10; break; case MarkPosition.MP_Left_Bottom: xpos = 10; ypos = height - WatermarkHeight - 10; break; } picture.DrawImage(watermark, new Rectangle(xpos, ypos, WatermarkWidth, WatermarkHeight), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes); watermark.Dispose(); imageAttributes.Dispose(); }