图片处理问题-仿(PS)图片放大效果

aaxsvbgasdf 2010-11-05 03:03:15
//所要实现的效果(用字符代表图片举例):
第一行颜色:红蓝黑黄
第二行颜色:黑红黄蓝
第三行颜色:白黑红黄
假设图片是由以上颜色顺序排列的,宽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;
}
...全文
470 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaxsvbgasdf 2010-11-15
  • 打赏
  • 举报
回复

能得到你的帮助真的太感谢了!就是这个问题
aaxsvbgasdf 2010-11-05
  • 打赏
  • 举报
回复
我发现了个问题当图片本身宽度太宽了,比如1440*900,
在代码:Bitmap result = new Bitmap(original.Width * scale, original.Height * scale);处会出现“参数无效”错误!我可以十分肯定是我技术不足,觉得这里应该有限制。我以前也遇到过

请求顺便帮忙解决!谢谢了先!
aaxsvbgasdf 2010-11-05
  • 打赏
  • 举报
回复
非常感谢,我找了好久,不过我的忘记我有多少分值了,如果你没收到积分,可以联系我,我刚刚填了详细信息又有40分了,能都给你。实在是太感谢了!我太兴奋了!有积分没收到问题,直接加我QQ:19551613就行了!
gomoku 2010-11-05
  • 打赏
  • 举报
回复
用这个就可以了InterpolationMode.NearestNeighbor:)

static Bitmap Mosaic(Bitmap original, int scale)
{
Bitmap result = new Bitmap(original.Width * scale, original.Height * scale);
using (Graphics g = Graphics.FromImage(result))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; //<---
g.DrawImage(original, 0, 0, result.Width, result.Height);
}
return result;
}

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧