110,532
社区成员
发帖
与我相关
我的任务
分享
//把图象变成单色的图
public void singlBmp(Bitmap bit)
{
Color c = new Color();
Color cc = new Color();
int rr, gg, bb;
for (int i = 0; i < bit.Width; i++)
{
for (int j = 0; j <bit.Height; j++)
{
c = bit.GetPixel(i, j);
rr = rrIn[c.R];
cc = Color.FromArgb(rr, rr, rr);
bit.SetPixel(i, j, cc);
}
}
}
//如果放到线程里面会很卡,处理的很慢
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
namespace neicun
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Bitmap m_Bmp = new Bitmap("d:\\nvhai.bmp");
int h = m_Bmp.Height;
int w = m_Bmp.Width;
Bitmap bmpOut = new Bitmap(w, h, PixelFormat.Format24bppRgb);
BitmapData dataIn = m_Bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData dataOut = bmpOut.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
byte* pIn = (byte*)(dataIn.Scan0.ToPointer());
byte* pOut = (byte*)(dataOut.Scan0.ToPointer());
for (int y = 0; y < dataIn.Height; y++)
{
for (int x = 0; x < dataIn.Width; x++)
{
pOut[1] = pOut[0];
pOut[2] = pOut[0];
pIn += 3;
pOut += 3;
}
pIn += dataIn.Stride - dataIn.Width * 3;
pOut += dataOut.Stride - dataOut.Width * 3;
}
}
bmpOut.UnlockBits(dataOut);
m_Bmp.UnlockBits(dataIn);
pictureBox1.Image = bmpOut;
}
}
}