13 个解决方案
#1
求大侠出现啊!!!
#2
#3
ControlPaint.DrawDisabledImage()
系统自带该功能
系统自带该功能
#4
还有这个的啊
#5
是DrawImageDisabled吧,不过还真没试过。
#6
这个嘛,自己可以写个方法的,但是,在C#里面处理图片,建议在unsafe下面用指针,这样的话,运行的速度很快,否则,你处理大点的图片,你会很纠结的,当然,要先你的项目里面,设置,允许不安全代码...
试试吧,应该没问题
//打开图片,并保存为位图
Bitmap thismap= (Bitmap)Image.FromFile("你的图片文件名");
Rectangle rect = new Rectangle(0, 0, thisMap.Width, thisMap.Height);
BitmapData bmpData = thisMap.LockBits(rect, ImageLockMode.ReadWrite, thisMap.PixelFormat);
byte temp = 0;
unsafe
{
//运用指针来处理图片
byte* ptr = (byte*)(bmpData.Scan0);
for (int i = 0; i < bmpData.Height; i++)
{
for (int j = 0; j < bmpData.Width; j++)
{
temp = (byte)(0.299 * ptr[2] + 0.587 * ptr[1] + 0.114 * ptr[0]);//灰度化公式,方法大致有三种,这里用的是加权平均法
ptr[0] = ptr[1] = ptr[2] = temp;
ptr += 4;//这里的4,是指每个像素的字节数
}
ptr += bmpData.Stride - bmpData.Width * 4;//偏移量
}
}
thisMap.UnlockBits(bmpData);
pictruebox1.Image=this.Map;//显示处理后的灰度图
试试吧,应该没问题
#7
#8
楼主意思是把彩色改为黑白吗
#9
一直在用的一个方法:
public static Image MakeGrayscale(Image image)
{
// source: http://www.switchonthecode.com/tutorials/csharp-tutorial-convert-a-color-image-to-grayscale
//create a blank bitmap the same size as original
Bitmap newBitmap = new Bitmap(image.Width, image.Height);
//get a graphics object from the new image
Graphics g = Graphics.FromImage(newBitmap);
//create the grayscale ColorMatrix
ColorMatrix colorMatrix = new ColorMatrix(
new float[][]
{
new float[] {.3f, .3f, .3f, 0, 0},
new float[] {.59f, .59f, .59f, 0, 0},
new float[] {.11f, .11f, .11f, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}
});
//create some image attributes
ImageAttributes attributes = new ImageAttributes();
//set the color matrix attribute
attributes.SetColorMatrix(colorMatrix);
//draw the original image on the new image
//using the grayscale color matrix
g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height),
0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
//dispose the Graphics object
g.Dispose();
attributes.Dispose();
return newBitmap;
}
#10
#11
这个也只是按照公式进行灰度化,并没有把图像变为8位灰度图像。不过这个方法好特别哦,从没想过用ImageAttributes去完成什么。
#12
修改生成位图的索引表,从伪彩修改为灰度
#13
ControlPaint.DrawImageDisabled();
#1
求大侠出现啊!!!
#2
#3
ControlPaint.DrawDisabledImage()
系统自带该功能
系统自带该功能
#4
还有这个的啊
#5
是DrawImageDisabled吧,不过还真没试过。
#6
这个嘛,自己可以写个方法的,但是,在C#里面处理图片,建议在unsafe下面用指针,这样的话,运行的速度很快,否则,你处理大点的图片,你会很纠结的,当然,要先你的项目里面,设置,允许不安全代码...
试试吧,应该没问题
//打开图片,并保存为位图
Bitmap thismap= (Bitmap)Image.FromFile("你的图片文件名");
Rectangle rect = new Rectangle(0, 0, thisMap.Width, thisMap.Height);
BitmapData bmpData = thisMap.LockBits(rect, ImageLockMode.ReadWrite, thisMap.PixelFormat);
byte temp = 0;
unsafe
{
//运用指针来处理图片
byte* ptr = (byte*)(bmpData.Scan0);
for (int i = 0; i < bmpData.Height; i++)
{
for (int j = 0; j < bmpData.Width; j++)
{
temp = (byte)(0.299 * ptr[2] + 0.587 * ptr[1] + 0.114 * ptr[0]);//灰度化公式,方法大致有三种,这里用的是加权平均法
ptr[0] = ptr[1] = ptr[2] = temp;
ptr += 4;//这里的4,是指每个像素的字节数
}
ptr += bmpData.Stride - bmpData.Width * 4;//偏移量
}
}
thisMap.UnlockBits(bmpData);
pictruebox1.Image=this.Map;//显示处理后的灰度图
试试吧,应该没问题
#7
#8
楼主意思是把彩色改为黑白吗
#9
一直在用的一个方法:
public static Image MakeGrayscale(Image image)
{
// source: http://www.switchonthecode.com/tutorials/csharp-tutorial-convert-a-color-image-to-grayscale
//create a blank bitmap the same size as original
Bitmap newBitmap = new Bitmap(image.Width, image.Height);
//get a graphics object from the new image
Graphics g = Graphics.FromImage(newBitmap);
//create the grayscale ColorMatrix
ColorMatrix colorMatrix = new ColorMatrix(
new float[][]
{
new float[] {.3f, .3f, .3f, 0, 0},
new float[] {.59f, .59f, .59f, 0, 0},
new float[] {.11f, .11f, .11f, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}
});
//create some image attributes
ImageAttributes attributes = new ImageAttributes();
//set the color matrix attribute
attributes.SetColorMatrix(colorMatrix);
//draw the original image on the new image
//using the grayscale color matrix
g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height),
0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
//dispose the Graphics object
g.Dispose();
attributes.Dispose();
return newBitmap;
}
#10
#11
这个也只是按照公式进行灰度化,并没有把图像变为8位灰度图像。不过这个方法好特别哦,从没想过用ImageAttributes去完成什么。
#12
修改生成位图的索引表,从伪彩修改为灰度
#13
ControlPaint.DrawImageDisabled();