-
-
-
-
-
-
-
-
- public void BuildWatermark(string rSrcImgPath,string rMarkImgPath,string rMarkText,string rDstImgPath)
- {
-
-
- Image imgPhoto = Image.FromFile(rSrcImgPath);
- int phWidth = imgPhoto.Width;
- int phHeight = imgPhoto.Height;
- Bitmap bmPhoto=new Bitmap(phWidth,phHeight, PixelFormat.Format24bppRgb);
- bmPhoto.SetResolution(72,72);
- Graphics grPhoto = Graphics.FromImage(bmPhoto);
-
-
- Image imgWatermark = new Bitmap(rMarkImgPath);
- int wmWidth = imgWatermark.Width;
- int wmHeight = imgWatermark.Height;
-
-
- grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
- grPhoto.DrawImage(
- imgPhoto,
- new Rectangle(0, 0, phWidth, phHeight),
- 0,
- 0,
- phWidth,
- phHeight,
- GraphicsUnit.Pixel);
-
-
-
- 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 = grPhoto.MeasureString(rMarkText,
- crFont);
- if((ushort)crSize.Width < (ushort)phWidth)
- break;
- }
-
-
-
- int yPixlesFromBottom = (int)(phHeight *.05);
- float yPosFromBottom = ((phHeight -
- yPixlesFromBottom)-(crSize.Height/2));
- float xCenterOfImg = (phWidth/2);
- StringFormat StrFormat = new StringFormat();
- StrFormat.Alignment = StringAlignment.Center;
-
-
-
- SolidBrush semiTransBrush2 =
- new SolidBrush(Color.FromArgb(153, 0, 0,0));
- grPhoto.DrawString(rMarkText,
- crFont,
- semiTransBrush2,
- new PointF(xCenterOfImg+1,yPosFromBottom+1),
- StrFormat);
- SolidBrush semiTransBrush = new SolidBrush(
- Color.FromArgb(153, 255, 255, 255));
- grPhoto.DrawString(rMarkText,
- crFont,
- semiTransBrush,
- new PointF(xCenterOfImg,yPosFromBottom),
- StrFormat);
-
- Bitmap bmWatermark = new Bitmap(bmPhoto);
- bmWatermark.SetResolution(
- imgPhoto.HorizontalResolution,
- imgPhoto.VerticalResolution);
- Graphics grWatermark =
- Graphics.FromImage(bmWatermark);
-
-
-
- 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 wmColorMatrix = new
- ColorMatrix(colorMatrixElements);
- imageAttributes.SetColorMatrix(wmColorMatrix,
- ColorMatrixFlag.Default,
- ColorAdjustType.Bitmap);
-
-
- int markWidth;
- int markHeight;
-
- if(phWidth<=wmWidth)
- {
- markWidth = phWidth-10;
- markHeight = (markWidth*wmHeight)/wmWidth;
- }
- else if(phHeight<=wmHeight)
- {
- markHeight = phHeight-10;
- markWidth = (markHeight*wmWidth)/wmHeight;
- }
- else
- {
- markWidth = wmWidth;
- markHeight = wmHeight;
- }
- int xPosOfWm = ((phWidth - markWidth)-10);
- int yPosOfWm = 10;
- grWatermark.DrawImage(imgWatermark,
- new Rectangle(xPosOfWm,yPosOfWm,markWidth,
- markHeight),
- 0,
- 0,
- wmWidth,
- wmHeight,
- GraphicsUnit.Pixel,
- imageAttributes);
-
- imgPhoto = bmWatermark;
- grPhoto.Dispose();
- grWatermark.Dispose();
- imgPhoto.Save(rDstImgPath,ImageFormat.Jpeg);
- imgPhoto.Dispose();
- imgWatermark.Dispose();
- }
posted @
2013-05-31 22:59
Net-Spider
阅读(
666)
评论()
收藏
举报