图片处理问题-仿(PS)图片放大效果
//所要实现的效果(用字符代表图片举例):
第一行颜色:红蓝黑黄
第二行颜色:黑红黄蓝
第三行颜色:白黑红黄
假设图片是由以上颜色顺序排列的,宽4像素,高4像素。
-------放大5倍后的效果为:
红红红红红蓝蓝蓝蓝蓝黑黑黑黑黑黄黄黄黄黄
红红红红红蓝蓝蓝蓝蓝黑黑黑黑黑黄黄黄黄黄
红红红红红蓝蓝蓝蓝蓝黑黑黑黑黑黄黄黄黄黄
红红红红红蓝蓝蓝蓝蓝黑黑黑黑黑黄黄黄黄黄
红红红红红蓝蓝蓝蓝蓝黑黑黑黑黑黄黄黄黄黄
黑黑黑黑黑红红红红红黄黄黄黄黄蓝蓝蓝蓝蓝
黑黑黑黑黑红红红红红黄黄黄黄黄蓝蓝蓝蓝蓝
黑黑黑黑黑红红红红红黄黄黄黄黄蓝蓝蓝蓝蓝
黑黑黑黑黑红红红红红黄黄黄黄黄蓝蓝蓝蓝蓝
黑黑黑黑黑红红红红红黄黄黄黄黄蓝蓝蓝蓝蓝
白白白白白黑黑黑黑黑红红红红红黄黄黄黄黄
白白白白白黑黑黑黑黑红红红红红黄黄黄黄黄
白白白白白黑黑黑黑黑红红红红红黄黄黄黄黄
白白白白白黑黑黑黑黑红红红红红黄黄黄黄黄
白白白白白黑黑黑黑黑红红红红红黄黄黄黄黄
也就是每个像素的RGB颜色的宽和高是原来的5倍,放大后的图片是原来的5倍
以下是我写的代码,效果不对,请大家指教(注:本人菜鸟)
/// <param name="m_Bmp">原始图片</param>
/// <param name="num">放大倍数</param>
/// <returns>放大后的图片</returns>
public Bitmap adsk(Bitmap m_Bmp, int num)
{
int h = m_Bmp.Height * num, w = m_Bmp.Width * num;
Bitmap bmpOut = new Bitmap(w, h,PixelFormat.Format24bppRgb);
BitmapData dataIn = m_Bmp.LockBits(new Rectangle(0, 0, m_Bmp.Width, m_Bmp.Height), 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 z = 1; z < num + 1; z++)
{
for (int x = 0; x < dataIn.Width; x++)
{
byte a = (byte)pIn[0];
byte b = (byte)pIn[1];
byte c = (byte)pIn[2];
for (int io = 1; io < num + 1; io++)
{
pOut[0] = a;
pOut[1] = b;
pOut[2] = c;
pOut += 3;
}
pIn += 3;
}
pOut += dataOut.Stride - dataOut.Width * 3;
}
pIn += dataIn.Stride - dataIn.Width * 3;
}
}
bmpOut.UnlockBits(dataOut);
m_Bmp.UnlockBits(dataIn);
return bmpOut;
}