很急。怎样获得图像的大小(filesize),分辨率之类的信息阿?(50分)

  • 主题发起人 主题发起人 花 儿
  • 开始时间 开始时间
我的问题怎么没人回答了?
 
那就用scanline吧,一个24bit真彩->灰度的例子
procedure TMainForm.GraychangeClick(Sender: TObject);
var
p :PByteArray;
x,y :Integer;
Bmp :TBitmap;
Gray:byte;

begin
Bmp :=TBitmap.Create;
Bmp.Assign(ChildForm.Image1.Picture.Bitmap);
Bmp.PixelFormat :=pf24Bit;
for y:=0 to Bmp.Height-1 do
begin
p:=Bmp.scanline[y];
for x:=0 to Bmp.Width-1 do
begin
Gray:=Round(p[x*3+2]*0.3+p[x*3+1]*0.59+p[x*3]*0.11);

p[x*3]:= Gray;
p[x*3+1]:= Gray;
p[x*3+2]:= Gray;
end

end;
有没有分?
 
抱歉,再后面加上:
childform.image1.picture.bitmap.assign(bmp);
bmp.free;
以上例子速度很快!
 
大家真的不理我了。。。。
 
HEHE.花儿被束之高阁了。 笑死了。 可惜我只会你上面提到的土办法。高级办法
老王也不会。 建议你看看源码 , 看看 tPicture是如何作的啦
 
呵呵,你还有什么问题呢?大家不是说得很清楚了吗?

图象的宽度和高度可以用如下办法:(可处理bmp, jpg 等 Image 支持的多图象类型)

uses jpeg;

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
with Image1.Picture do
begin
LoadFromFile(OpenDialog1.FileName);
ShwoMessage('Width: ' + inttostr(Width) + ' : ' +
'Height: ' + inttostr(Height));
end;
end;

说到底,不论哪种方法都要把文件读到内存里,因此不要认为这种方法是土方法,至少它可以达到你的要求;

图象文件的大小(FileSize) 可以参照 4 楼 huazai 的方法;

另外,图象本身是没有分辨率的概念的,你可以参看以下讨论:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=963644
 
我下去研究研究。。。。
 
多人接受答案了。
 
huazai提供的转灰度代码不是真正的转灰度,还是24位色深度,只是颜色变灰了。
灰度图片应该还要转成8位颜色深度才对。
 
后退
顶部