当前位置:编程学习 > C#/ASP.NET >>

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();
            }
        }

    }
--------------------编程问答-------------------- --------------------编程问答--------------------
引用 2 楼 silverradiance 的回复:
图像大小和dpi
如果先要改变图片的大小,jpeg图片还可以对图片质量进行压缩
C# code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 /// <summary>        /// jpeg图片压缩      ……

图像大小和dpi博客里:
bmpTarget = TiffManager.KiSharpen(bmpTarget, (float)0.7);
这句是什么意思?在这出错了!出错提示:
CS0103: The name 'TiffManager' does not exist in the current context --------------------编程问答-------------------- 帮忙顶起,楼主 --------------------编程问答--------------------
引用 4 楼 cde32 的回复:
引用 2 楼 silverradiance 的回复:图像大小和dpi
如果先要改变图片的大小,jpeg图片还可以对图片质量进行压缩
C# code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 /// <summary>……

bmpTarget = TiffManager.KiSharpen(bmpTarget, (float)0.7);这句话是tiff格式图片处理的,可以忽略 --------------------编程问答--------------------
引用 6 楼 silverradiance 的回复:
引用 4 楼 cde32 的回复:引用 2 楼 silverradiance 的回复:图像大小和dpi
如果先要改变图片的大小,jpeg图片还可以对图片质量进行压缩
C# code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515……

可是下面这句是位深度设置的,还是有“TiffManager”,该怎样处理:
bmpTarget = TiffManager.ConvertTo1bbpIndexed(bmpTarget, (float)0.8); --------------------编程问答--------------------    bmpTarget.SetResolution(fTargetHorResolution, fTargetVerResolution);
主要是这一句,这个就是设置dpi的,设置完成后查看图片的高级属性图片的dpi已经改变了
dpi的数值不会影响到图片的本身大小,应该是打印时候的一个参数来使用的。
如果想要改变图片的大小,jpeg图片可以通过我给你的那个方法来设置压缩比 --------------------编程问答--------------------
引用 8 楼 silverradiance 的回复:
bmpTarget.SetResolution(fTargetHorResolution, fTargetVerResolution);
主要是这一句,这个就是设置dpi的,设置完成后查看图片的高级属性图片的dpi已经改变了
dpi的数值不会影响到图片的本身大小,应该是打印时候的一个参数来使用的。
如果想要改变图片的大小,jpeg图片可以通过我给你的那个方法来……

这就是说,没有办法改变png格式的分辨率和位深度?
我搜索过,这样用SetResolution确实只能改变名义上的属性数值,对分辨率没有影响,是不是用的不对?而且PixelFormat.Format32bppPArgb也不知道具体用法。 --------------------编程问答--------------------
引用 9 楼 cde32 的回复:
引用 8 楼 silverradiance 的回复:bmpTarget.SetResolution(fTargetHorResolution, fTargetVerResolution);
主要是这一句,这个就是设置dpi的,设置完成后查看图片的高级属性图片的dpi已经改变了
dpi的数值不会影响到图片的本身大小,应该是打印时候的一个参数来使用的。
如果想要改变图片……

你的分辨率指的是什么?图片的高和宽?
位深度指的又是什么?
SetResolution改变就是图片的dpi
--------------------编程问答--------------------
引用 10 楼 silverradiance 的回复:
引用 9 楼 cde32 的回复:引用 8 楼 silverradiance 的回复:bmpTarget.SetResolution(fTargetHorResolution, fTargetVerResolution);
主要是这一句,这个就是设置dpi的,设置完成后查看图片的高级属性图片的dpi已经改变了
dpi的数值不会影响到图片的本身大小,应该是打印时候的一个……

分辨率指的是水平和垂直dpi,但是m_Bitmap.SetResolution(8, 8);只能改变名义上的分辨率。这些你看看图片属性就知道了,位深度也一样!
Bitmap截图默怎样设置这两个参数? --------------------编程问答--------------------
引用 11 楼 cde32 的回复:
引用 10 楼 silverradiance 的回复:引用 9 楼 cde32 的回复:引用 8 楼 silverradiance 的回复:bmpTarget.SetResolution(fTargetHorResolution, fTargetVerResolution);
主要是这一句,这个就是设置dpi的,设置完成后查看图片的高级属性图片的dpi已经改变了
dp……

什么叫做名义上的分辨率?我的属性里已经改变了呀,你要改变的是什么?你说的不是这个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;
        }

--------------------编程问答--------------------
引用 12 楼 silverradiance 的回复:
引用 11 楼 cde32 的回复:引用 10 楼 silverradiance 的回复:引用 9 楼 cde32 的回复:引用 8 楼 silverradiance 的回复:bmpTarget.SetResolution(fTargetHorResolution, fTargetVerResolution);
主要是这一句,这个就是设置dpi的,设置完成后查看图片的高……

我在主贴说了SetResolution貌似无效。你把dpi设成100和10对比一下,尽管图片名义上的属性变了,但是图片的体积大小和清晰度一点也没变!10dpi应该能看出马赛克了,可这些10dpi甚至3dpi的图片依旧十分清晰——真正的dpi没有变!
还有,网上也有介绍改变位深度的文章,你给我的例子是变成1——变成黑白的!可我运行不了那段代码,总出错! --------------------编程问答-------------------- 使用此方法,可为新创建的位图设置所需的分辨率。更改图像的分辨率不会更改其物理大小。
这是msdn给的解释
之前给你的那个方法是没有问题的,能够压缩问价你的大小。如果你要做马赛克的效果,可以通过其他方式实现
马赛克
另外如果有条件可以尝试把dpi改变后打印出来,看看这个参数是不是用开控制打印时的dpi的 --------------------编程问答-------------------- bitmap的SetResolution  改变的DPI值只有在打印的时候才能体现出来,和图像的大小和位深没有任何关系。 --------------------编程问答-------------------- 什么“名义上的分辨率”,那就是分辨率,是你自己把分辨率理解错了
分辨率是用来联系图片的像素尺寸和物理尺寸的,只有需要在二者之间转化的时候才能体现出作用。比如,扫描仪在扫描的时候需要记录下原件的物理尺寸,怎么记录呢,就是记录下自己生成图片时使用的分辨率。打印机在打印图片的时候是按照图片的物理尺寸打印,打印机怎么知道图片的物理尺寸是多少呢?这个时候就需要借助分辨率信息把像素尺寸转化为物理尺寸。

而电脑上大部分程序忽略图片的分辨率信息,如实地显示图片文件的每一个像素,也就是是按照图片的像素大小在显示。所以不管你怎么改分辨率,在电脑上看图片的“大小”不会变。当然有些印刷设计相关的软件是会模拟“物理尺寸”显示的,比如PhotoShop。顺便说一下,.NET中的Graphics.DrawImage的最简单重载也是按照“物理尺寸”在绘制,所以有时候你会发觉他画出来的图片的大小和图片在其他软件,比如图片浏览器,中的大小不一致。

如果你单纯地改变分辨率信息,意味着改变图片的物理尺寸。分辨率调高,物理尺寸变小,打印出来图片变小,清晰度变高;分辨率调低,物理尺寸变大,打印出来图片变大,清晰度变低。

如果你想要改变分辨率而不影响图片的物理尺寸,那你还得改变图片的像素尺寸。增大分辨率,需要补充更多的像素;减小分辨率,需要删除掉一些多余的像素。至于怎么补充,怎么删除,有很多不同的算法。ps有这个功能,好像就提供了几种不同的算法供选择。 --------------------编程问答--------------------
引用 16 楼 hhddzz 的回复:
什么“名义上的分辨率”,那就是分辨率,是你自己把分辨率理解错了
分辨率是用来联系图片的像素尺寸和物理尺寸的,只有需要在二者之间转化的时候才能体现出作用。比如,扫描仪在扫描的时候需要记录下原件的物理尺寸,怎么记录呢,就是记录下自己生成图片时使用的分辨率。打印机在打印图片的时候是按照图片的物理尺寸打印,打印机怎么知道图片的物理尺寸是多少呢?这个时候就需要借助分辨率信息把像素尺寸转化为物理尺寸。

……

谢谢各位的耐心解释!
在PS上反复对比,明白SetResolution改变的DPI是什么效果了。
可是下面这句是设置位深度的:
bmpTarget = TiffManager.ConvertTo1bbpIndexed(bmpTarget, (float)0.8); 
报错了!该怎样设置位深度呢? --------------------编程问答-------------------- Bitmap bmp = new Bitmap(@"G:\图片\古巷.jpg");
            bmp.SetResolution(96,96);  --------------------编程问答--------------------
引用 18 楼 wq6707 的回复:
Bitmap bmp = new Bitmap(@"G:\图片\古巷.jpg");
            bmp.SetResolution(96,96);
谢谢,上面已经回答过了,这是设置打印的。
谁会设置位深度?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,