我是按整数放大图片,绝一个点,放大1倍是四个点,能清楚的看到锯齿的那种放大。
以下是我的代码,可惜效率太底了,我放大一张1920*1080的图片要10秒左右。
string strFileNameOld = "f:\\ddd1.png";
string strFileNameNew = "f:\\ddd2.png";
int w3, h3, iz;
Color myColor;
int i, j, i0, j0, i1, j1;
iz = 2;
Bitmap bmpTmp = (Bitmap)System.Drawing.Image.FromFile(strFileNameOld);
w3 = bmpTmp.Width;
h3 = bmpTmp.Height;
Bitmap bmpNew = new Bitmap(w3 * iz, h3 * iz);
Graphics g = Graphics.FromImage(bmpNew);
try
{
for (i = 0; i < w3; i++)
{
i0 = i * iz;
for (j = 0; j < h3; j++)
{
j0 = j * iz;
myColor = bmpTmp.GetPixel(i, j);
for (i1 = i0; i1 < i0 + iz; i1++)
{
for (j1 = j0; j1 < j0 + iz; j1++)
{
bmpNew.SetPixel(i1, j1, myColor);
}
}
}
}
}
catch
{ } bmpTmp.Dispose();
g.Dispose();
bmpNew.Save(strFileNameNew, System.Drawing.Imaging.ImageFormat.Bmp);
以下是我的代码,可惜效率太底了,我放大一张1920*1080的图片要10秒左右。
string strFileNameOld = "f:\\ddd1.png";
string strFileNameNew = "f:\\ddd2.png";
int w3, h3, iz;
Color myColor;
int i, j, i0, j0, i1, j1;
iz = 2;
Bitmap bmpTmp = (Bitmap)System.Drawing.Image.FromFile(strFileNameOld);
w3 = bmpTmp.Width;
h3 = bmpTmp.Height;
Bitmap bmpNew = new Bitmap(w3 * iz, h3 * iz);
Graphics g = Graphics.FromImage(bmpNew);
try
{
for (i = 0; i < w3; i++)
{
i0 = i * iz;
for (j = 0; j < h3; j++)
{
j0 = j * iz;
myColor = bmpTmp.GetPixel(i, j);
for (i1 = i0; i1 < i0 + iz; i1++)
{
for (j1 = j0; j1 < j0 + iz; j1++)
{
bmpNew.SetPixel(i1, j1, myColor);
}
}
}
}
}
catch
{ } bmpTmp.Dispose();
g.Dispose();
bmpNew.Save(strFileNameNew, System.Drawing.Imaging.ImageFormat.Bmp);
string strFileNameNew = "f:\\ddd3.png";
Bitmap originBmp = (Bitmap)System.Drawing.Image.FromFile(strFileNameOld);
int w = Convert.ToInt32(originBmp.Width * iSize);
int h = Convert.ToInt32(originBmp.Height * iSize);
Bitmap resizedBmp = new Bitmap(w, h);
Graphics g = Graphics.FromImage(resizedBmp);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
//g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.Invalid;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
g.DrawImage(originBmp, new Rectangle(0, 0, w, h), new Rectangle(0, 0, originBmp.Width, originBmp.Height), GraphicsUnit.Pixel);
g.Dispose();
originBmp.Dispose();
resizedBmp.Save(strFileNameNew, System.Drawing.Imaging.ImageFormat.Bmp);
javaScript编辑器,JS专用编辑工具,css的专用编辑器,免费绿色版,需要.net2.0才能运行。特色:
1.左侧能列出javascript的函数列表和对应注释,适合修改很大的js文件。
2.断电保护,如果突然因为断电蓝屏等情况,程序再次打开时,所有内容都会在上次修改中的状态,可能仅仅丢失最后二分钟的内容。
3.能保存近半个月的记录,在程序的tempfile文件中,所以因为误修改,可以到此目录下去找历史文件。
4.能列出css文件的项目列表,方便修改大css文件
5.bat文件的语法高亮
6.去掉了菜单栏行,选项卡行,工具栏行的空间占用,能显示更多的代码行数
7.快速查寻,选中的文字向下查询
8.内含一个工式计算器和网页配色工具
9.能注释和取消注释,不用再一行行的前面加//或去掉//了
10.自定义了两类js注释,方便把js中的函数,代码按功能划分
即使是这样,也不能保证每个锯齿点透明度都是255,从你第二次代码来说纯粹是依赖系统绘制,而系统放大绘制本来就是近似插值.建议通过lock成一个bimapdata手工进行插值以保证每个锯齿点都是纯值(透明度255).
你可以做个试验.将包含透明的PNG图片放大然后保存,再在PS中打开,通过放大N倍直到看到一个个像素格,然后就能发现其中的秘密了.不过你的需求不需要这么精确了.
常常有这样的情况:
在PS中画了一张图,背景已经设置纯色了,在程序中通过透明色抠去的时候,发现还有一些残留.就是这个原因.
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
继续宣传我的软件:如意工具箱,还有jsEdit,javascript专用编辑工具,能显示函数列表,适合修改大js文件
下载地址在 http://www.3http.com
介绍地址
http://topic.csdn.net/u/20110314/11/9f3b0ada-abe5-4840-9df2-87b941b24ebe.html?27934
string strFileNameNew = "f:\\ddd2.png";
int w3, h3, iz;
Color myColor;
int i, j, i0, j0, i1, j1;
iz = 2;
Bitmap bmpTmp = (Bitmap)System.Drawing.Image.FromFile(strFileNameOld);
w3 = bmpTmp.Width;
h3 = bmpTmp.Height;
Bitmap bmpNew = new Bitmap(w3 * iz, h3 * iz);
Graphics g = Graphics.FromImage(bmpNew);
try
{
for (i = 0; i < w3; i++)
{
i0 = i * iz;
for (j = 0; j < h3; j++)
{
j0 = j * iz;
myColor = bmpTmp.GetPixel(i, j);
for (i1 = i0; i1 < i0 + iz; i1++)
{
for (j1 = j0; j1 < j0 + iz; j1++)
{
bmpNew.SetPixel(i1, j1, myColor);
}
}
}
}
}
catch
{ } bmpTmp.Dispose();
g.Dispose();
bmpNew.Save(strFileNameNew, System.Drawing.Imaging.ImageFormat.Bmp);
可以试试
当要放大时,有脚本修改img 的高宽值!That's All!