Bitmap怎样设置?????
--------------------编程问答-------------------- 怎么无人问津啊、、、 --------------------编程问答-------------------- 图像大小和dpi如果先要改变图片的大小,jpeg图片还可以对图片质量进行压缩
--------------------编程问答-------------------- --------------------编程问答--------------------
/// <summary>
/// jpeg图片压缩
/// </summary>
/// <param name="sFile"></param>
/// <param name="outPath"></param>
/// <param name="flag">压缩质量</param>
/// <returns></returns>
public static bool GetPicThumbnail(string sFile, string outPath, int flag)
{
System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);
ImageFormat tFormat = iSource.RawFormat;
//以下代码为保存图片时,设置压缩质量
EncoderParameters ep = new EncoderParameters();
long[] qy = new long[1];
qy[0] = flag;//设置压缩的比例1-100
EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[0] = eParam;
try
{
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo = null;
for (int x = 0; x < arrayICI.Length; x++)
{
if (arrayICI[x].FormatDescription.Equals("JPEG"))
{
jpegICIinfo = arrayICI[x];
break;
}
}
if (jpegICIinfo != null)
{
iSource.Save(outPath, jpegICIinfo, ep);//dFile是压缩后的新路径
}
else
{
iSource.Save(outPath, tFormat);
}
return true;
}
catch
{
return false;
}
finally
{
iSource.Dispose();
iSource.Dispose();
}
}
}
图像大小和dpi博客里:
bmpTarget = TiffManager.KiSharpen(bmpTarget, (float)0.7);
这句是什么意思?在这出错了!出错提示:
CS0103: The name 'TiffManager' does not exist in the current context --------------------编程问答-------------------- 帮忙顶起,楼主 --------------------编程问答--------------------
bmpTarget = TiffManager.KiSharpen(bmpTarget, (float)0.7);这句话是tiff格式图片处理的,可以忽略 --------------------编程问答--------------------
可是下面这句是位深度设置的,还是有“TiffManager”,该怎样处理:
bmpTarget = TiffManager.ConvertTo1bbpIndexed(bmpTarget, (float)0.8); --------------------编程问答-------------------- bmpTarget.SetResolution(fTargetHorResolution, fTargetVerResolution);
主要是这一句,这个就是设置dpi的,设置完成后查看图片的高级属性图片的dpi已经改变了
dpi的数值不会影响到图片的本身大小,应该是打印时候的一个参数来使用的。
如果想要改变图片的大小,jpeg图片可以通过我给你的那个方法来设置压缩比 --------------------编程问答--------------------
这就是说,没有办法改变png格式的分辨率和位深度?
我搜索过,这样用SetResolution确实只能改变名义上的属性数值,对分辨率没有影响,是不是用的不对?而且PixelFormat.Format32bppPArgb也不知道具体用法。 --------------------编程问答--------------------
你的分辨率指的是什么?图片的高和宽?
位深度指的又是什么?
SetResolution改变就是图片的dpi
--------------------编程问答--------------------
分辨率指的是水平和垂直dpi,但是m_Bitmap.SetResolution(8, 8);只能改变名义上的分辨率。这些你看看图片属性就知道了,位深度也一样!
Bitmap截图默怎样设置这两个参数? --------------------编程问答--------------------
什么叫做名义上的分辨率?我的属性里已经改变了呀,你要改变的是什么?你说的不是这个dpi?
以下是截图代码
/// <summary>
/// 根据范围从原始图像中截取
/// </summary>
/// <param name="sourceImage"></param>
/// <param name="cutRectangle"></param>
/// <returns></returns>
public Bitmap CutImageByRectangle(Bitmap sourceImage, Rectangle cutRectangle)
{
Bitmap resultBitmap = new Bitmap(cutRectangle.Width, cutRectangle.Height);
using (Graphics g = Graphics.FromImage(resultBitmap))
{
Rectangle resultRectangle = new Rectangle(0, 0, cutRectangle.Width, cutRectangle.Height);
Rectangle sourceRectangle = new Rectangle(cutRectangle.X, cutRectangle.Y, cutRectangle.Width, cutRectangle.Height);
g.DrawImage(sourceImage, resultRectangle, sourceRectangle, GraphicsUnit.Pixel);
}
return resultBitmap;
}
--------------------编程问答--------------------
我在主贴说了SetResolution貌似无效。你把dpi设成100和10对比一下,尽管图片名义上的属性变了,但是图片的体积大小和清晰度一点也没变!10dpi应该能看出马赛克了,可这些10dpi甚至3dpi的图片依旧十分清晰——真正的dpi没有变!
还有,网上也有介绍改变位深度的文章,你给我的例子是变成1——变成黑白的!可我运行不了那段代码,总出错! --------------------编程问答-------------------- 使用此方法,可为新创建的位图设置所需的分辨率。更改图像的分辨率不会更改其物理大小。
这是msdn给的解释
之前给你的那个方法是没有问题的,能够压缩问价你的大小。如果你要做马赛克的效果,可以通过其他方式实现
马赛克
另外如果有条件可以尝试把dpi改变后打印出来,看看这个参数是不是用开控制打印时的dpi的 --------------------编程问答-------------------- bitmap的SetResolution 改变的DPI值只有在打印的时候才能体现出来,和图像的大小和位深没有任何关系。 --------------------编程问答-------------------- 什么“名义上的分辨率”,那就是分辨率,是你自己把分辨率理解错了
分辨率是用来联系图片的像素尺寸和物理尺寸的,只有需要在二者之间转化的时候才能体现出作用。比如,扫描仪在扫描的时候需要记录下原件的物理尺寸,怎么记录呢,就是记录下自己生成图片时使用的分辨率。打印机在打印图片的时候是按照图片的物理尺寸打印,打印机怎么知道图片的物理尺寸是多少呢?这个时候就需要借助分辨率信息把像素尺寸转化为物理尺寸。
而电脑上大部分程序忽略图片的分辨率信息,如实地显示图片文件的每一个像素,也就是是按照图片的像素大小在显示。所以不管你怎么改分辨率,在电脑上看图片的“大小”不会变。当然有些印刷设计相关的软件是会模拟“物理尺寸”显示的,比如PhotoShop。顺便说一下,.NET中的Graphics.DrawImage的最简单重载也是按照“物理尺寸”在绘制,所以有时候你会发觉他画出来的图片的大小和图片在其他软件,比如图片浏览器,中的大小不一致。
如果你单纯地改变分辨率信息,意味着改变图片的物理尺寸。分辨率调高,物理尺寸变小,打印出来图片变小,清晰度变高;分辨率调低,物理尺寸变大,打印出来图片变大,清晰度变低。
如果你想要改变分辨率而不影响图片的物理尺寸,那你还得改变图片的像素尺寸。增大分辨率,需要补充更多的像素;减小分辨率,需要删除掉一些多余的像素。至于怎么补充,怎么删除,有很多不同的算法。ps有这个功能,好像就提供了几种不同的算法供选择。 --------------------编程问答--------------------
谢谢各位的耐心解释!
在PS上反复对比,明白SetResolution改变的DPI是什么效果了。
可是下面这句是设置位深度的:
bmpTarget = TiffManager.ConvertTo1bbpIndexed(bmpTarget, (float)0.8);
报错了!该怎样设置位深度呢? --------------------编程问答-------------------- Bitmap bmp = new Bitmap(@"G:\图片\古巷.jpg");
bmp.SetResolution(96,96); --------------------编程问答-------------------- 谢谢,上面已经回答过了,这是设置打印的。
谁会设置位深度?
补充:.NET技术 , C#