急了,如何获得TBitmap中图片的分辨率(1200分) (100分)

  • 主题发起人 主题发起人 whf
  • 开始时间 开始时间
W

whf

Unregistered / Unconfirmed
GUEST, unregistred user!
别告诉我不能获得(因为windows带的图象处理就可已得到),1200分,决不食言
 
什么意思??是指图像高和宽???
用.width and .Height属性啊,其他象颜色或者别的一些也可以得到啊
 
就是它的宽和高
 
图像的分辨率有多种衡量方法,比如看它的点阵,就是宽度和高度;
或者看它的颜色数,或者看它的PPI ,也就是每英寸的象素数目,等等。

你究竟是想用哪种方法来衡量呢?说说清楚么。
 
TBitmap本身有
Bitmap.Width

Bitmap.Height 啊
 
to 卷起千堆雪tyn:
我要的就是每英寸的象素数目
 
bitmap有个scanline方法,用它你可以得到bitmap中一行的象素值,并存放在数组中,
遍历这个数组,你可以得到每一点的象素质
 
不是我想要的。
 
图像分辨率通常是在用数码相机拍摄时就定好了,但是你可以修改;
至于如何获取,不懂了。。。。

给你看点文章 :http://www.powerba.com/develop/delphi/article/20001003015.htm
 
在同样的显示尺寸的前提下,高分辨率的图像包含的像素比低分辨率的图像要多,
因此其中的像素相对来说较小。例如:1英寸见方的图像,在72ppi的分辨率下包
含了5184个像素(72×72),而同样的1英寸见方的图像,在300ppi的分辨率下包
含了90,000个像素(300×300)。高分辨率的图像通常比低分辨率图像包含更多
的细节和敏感的颜色转变。其位图文件的大小与图像的总像素尺寸是成比例的。
高分辨率的图像要开销更多的磁盘空间,图像处理与输出也需化费更多的时间。

根据这一段话,可以得到部分信息。
再来看这段帮助(是Borland的帮助里的信息)
Changing the pixel format is most commonly used with ScanLine, because
your code must decode the pixel data accessed by ScanLine. Image-editing
tools usually use one pixel for all internal image operations and copy
the results to the screen (in whatever format) as the last step.
大概意思是,所以这段代码应该有效

Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
// This example shows drawing directly to the Bitmap
Byte *ptr;
try
{
pBitmap->LoadFromFile("C://Program Files//Common Files//Borland Shared//Images//Splash//256color//factory.bmp ");
for (int y = 0; y < pBitmap->Height; y++)
{
ptr = (Byte *)pBitmap->ScanLine[y];
这时ptr中的个数肯定与你说的分辨率有关,或者可以这样
int datacount=strlen((char*)ptr)/pBitmap->Width ;
}
}
catch (...)
{
ShowMessage("Could not load or alter bitmap");
}
delete pBitmap;

把上面得到的数字与你用你说的图像处理工具得到的值比较一下,看是否有
联系

 
不对吧,这个跟颜色数页有关吧。
看来这个很难(搜索以前的提问,没有结果),简单点,如何得到bmp文件中的x,y方向上
分辨率,是不是必须读取文件,自己判断?如何读取?
 
DIB 位图没有分辨率这个概念吧? 应该是 DDB 里的;
bitmapinfoheader 里面确实有两个字段:biXPelsPerMeter,biYPelsPerMeter;
但对于 DIB 来说,这两个字段一般是 0,只能说一个位图在 x 或 y 方向上有多少个象素。

如果你把它显示 或 打印在一指定的区域上,这时才可以说它的显示 或 打印分辨率是多大,

这是我的看法。
 
那我就不知道了,无论是Borland的TBitmap,还是VC的CBitmap,都没有直接提供
关于这个的操作,但根据刚才那两句英文,我觉得你肯定得用ScanLine,
或许不是我说的直接返回个数,
至于你说的那根颜色数有关,那么是否存在这种可能,windows把这个分辨率
和颜色数统一起来了,比如多少色的图片拥有一个固定的分辨率??
你手头有工具,你怎么不试验一下啊,看是什么原因
 
我用的是win2000自带的"图象处理"程序,98也自带,名字不一样

to cqbaobao:
你的说法好像有问题,如果图片的分辨率不是96的话,delphi显示的大小与word,photoshop中
的不一样,图片应该有分辨率这种说法,因为photoshop中就可以读出来,我说的那个"图象处理"
程序也能读出来。
 
98下的叫“映像”
再加400分。
 
兄弟啊,我用“映像”看过了,在属性里,它的默认图像分辨率是100×100,
也就是说在载入图像时,自动转为100×100的图像分辨率;这是我的理解。
 
不对,确实是根据不同的图像变化的,奇怪的是
我把一张相同的256色的图像存成单色,它得分辨率反而大了
 
而且分辨率是可以改的。
 
同意老大,
用某一种软件读出的位图,显示出来时实际就是显示分辨率,
WORD处理的位图都是 96 DPI的,跟显示器分辨率一样,
 
no no,word显示的可不是96DPI,它可以根据图片中存储的分辨率来判断的,我已经是过了.
画板和delphi都是按96DPI处理的。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部