问题描述
我无法从我的服务器路径中删除图像文件它会导致进程无法访问文件FileName的错误,因为它正被另一个进程使用。我尝试了很多方法,但仍然徒劳无功。请帮我解决这个问题。
这是我的代码片段。
watermark();
DeleteImages();
public void DeleteImages()
{
试试
{
File.Delete(Server.MapPath(。\ \TmpImages\\WaterMark.jpg)); \\This Image Deleted Fine。
File.Delete(Server.MapPath(。\\TmpImages\\SavedImage.jpg)); \\删除此图片时抛出异常。
}
catch(例外情况)
{
LogManager.LogException(例如,删除图像时出错。);
Master.ShowMessage(ex.Message,true);
}
}
public void watermark()
{
//创建一个包含水印照片的图像对象
Image imgPhoto = Image.FromFile(Server .MapPath(。\\TmpImages\\SavedImage.jpg));
int phWidth = imgPhoto.Width;
int phHeight = imgPhoto.Height ;
//创建原始照片大小的位图
位图bmPhoto =新位图(phWidth,phHeight,Pixe lFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolution,imgPhoto.VerticalResolution);
//将Bitmap加载到Graphics对象中
图形grPhoto = Graphics.FromImage(bmPhoto);
//创建一个包含图像的对象水印
Image imgWatermark = new Bitmap(Server.MapPath(。\\TmpImages\\PrintasWatermark.jpg));
int wmWidth = imgWatermark .Width;
int wmHeight = imgWatermark.Height;
//设置此Graphics对象的渲染质量
grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
//将原始大小的照片Image对象绘制到图形对象。
grPhoto .DrawImage(
imgPhoto,//照片图片对象
new Rec tangle(0,0,phWidth,phHeight),//矩形结构
0,//要绘制的源图像部分的x坐标。
0, //要绘制的源图像部分的y坐标。
phWidth,//要绘制的源图像部分的宽度。
phHeight,//要绘制的源图像部分的高度。
GraphicsUnit.Pixel); //计量单位
// --------------------------- ----------------------------
//最大化版权信息的大小我们将
//测试多个字体大小以确定最大可能
//我们可以用于照片宽度的字体
//定义一个数组您希望考虑的点尺寸作为可能性
// ------------------------------ -------------------------
/ /通过将文本对齐设置为居中来定义文本布局
StringFormat StrFormat = new StringFormat();
StrFormat.Alignment = StringAlignment.Center;
//定义一个半透明黑色的画笔(Alpha设置为153)
SolidBrush semiTransBrush2 =新的SolidBrush(Color.FromArgb(153,0,0, 0));
//定义一个半透明白色的画笔(Alpha设置为153)
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153,255,255,255));
// ---------------------- --------------------------------------
// Step# 2 - 插入水印图像
// ----------------------------------- -------------------------
//根据以前的内容创建一个位图修改后的照片位图
位图bmWatermark =新位图(bmPhoto);
bmWatermark.SetResolution(imgPhoto.HorizontalResolution,imgPhoto.VerticalResolution);
/ /将此位图加载到新的图形对象中
图形grWatermark = Graphics.FromImage(bmWatermark);
//实现transulcent水印我们将通过定义一个ImageAttributes对象来应用(2)颜色
//操作/>
// seting(2)其属性。
ImageAttributes imageAttributes = new ImageAttributes();
//操作水印图像的第一步是将背景颜色替换为背景颜色(Alpha = 0,R = 0,G = 0,B = 0)
//背景颜色
//为此我们将使用Colormap并使用它来定义RemapTable
ColorMap colorMap = new ColorMap();
//我的水印定义为100%绿色背景这将是我们搜索并替换为透明度的颜色
colorMap.OldColor = Color.FromArgb(255,0,255,0);
colorMap.NewColor = Color.FromArgb(0,0,0,0);
ColorMap [] remapTable = {colorMap};
imageAttributes.SetRemapTable(remapTable,ColorAdjustType.Bitmap);
//第二个颜色的男人ipulation用于改变
//水印的不透明度。这是通过应用包含RGBA空间的
//坐标的5x5矩阵来完成的。通过将第3行和第3列
//设置为0.3f,我们达到了不透明度水平
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.0 f,0.3f,0.0f},
new float [] {0.0f,0.0f,0.0f,0.0f,1.0f}};
ColorMatrix wmColorMatrix =新的ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(wmColorMatrix,ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
//对于这个例子我们w生病了右上方的水印
//照片的手角。向下偏移10像素到
//留下10个像素
int xPosOfWm =((phWidth - wmWidth) - 10);
int yPosOfWm = 10;
grWatermark.DrawImage(imgWatermark,
new Rectangle(xPosOfWm,yPosOfWm,wmWidth) ,wmHeight),//设置排序位置
0,//要绘制的源图像部分的x坐标。
0,// y坐标要绘制的源图像部分。
wmWidth,//水印宽度
wmHeight,//水印高度
GraphicsUnit.Pixel, //测量单位
imageAttributes); // ImageAttributes对象
//用新的位图替换原始的photgraphs位图
imgPhoto = bmWatermark;
grPhoto.Dispose();
grWatermark.Dispose();
//将新图像保存到文件系统。
imgPhoto.Save( Server.MapPath(。\\TmpImages\\WaterMark.jpg),ImageFormat.Jpeg);
imgPhoto.Dispose();
imgWatermark。 Dispose();
}
这篇关于IO Exception Thrown(进程无法访问文件'filename',因为它正被另一个进程使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!