那为大侠能提纲一个操作BMP文件的原程序。(100分)

  • 主题发起人 主题发起人 陈礼泉
  • 开始时间 开始时间

陈礼泉

Unregistered / Unconfirmed
GUEST, unregistred user!
那为大侠能提纲一个操作BMP文件的原程序。
最基本的操作,例如定义文件头、文件数据,以及把它读出来
一定的是Delphi的,谢谢了!
 
在FORM1中放入IMAGE控件
调用
image1.picture.loadfromfile('d:/.../*.bmp')
即可
 
var
bmp1:Tbitmap
begin
bmp1 :=Tbitmap.create;
bmp1.loadfrmomfile('文件名');
...
bmp1.loadfromstream(流);
bmp.canvas.copyrect(.....);
... 很多操作...
bmp1.free;
end;
 
不会吧,你们这样对待陈礼泉朋友?
不过在Delphi里,你不得不轻松一下,TBitmap都给你封装好了,如果你非要研究一下的话,
去看BITMAP等结构吧。
The BITMAP structure defines the type, width, height, color format, and bit values of a bitmap.

typedef struct tagBITMAP {
LONG bmType;
LONG bmWidth;
LONG bmHeight;
LONG bmWidthBytes;
WORD bmPlanes;
WORD bmBitsPixel;
LPVOID bmBits;
} BITMAP, *PBITMAP;
Members
 
更详细的细节是这样的:
bmp 文件
  bmp(bitmap 的 缩 写) 文 件 格 式 是 windows 本 身 的 位 图 文 件 格 式, 所
谓 本 身 是 指 windows 内 部 存 储 位 图 即 采 用 这 种 格 式。 一 个 .bmp 格
式 的 文 件 通 常 有 .bmp 的 扩 展 名, 但 有 一 些 是 以 .rle 为 扩 展 名 的,
rle 的 意 思 是 行 程 长 度 编 码(run length encoding)。 这 样 的 文 件 意 味
着 其 使 用 的 数 据 压 缩 方 法 是 .bmp 格 式 文 件 支 持 的 两 种 rle 方 法
中 的 一 种。

  bmp 文 件 可 用 每 象 素 1、 4、 8、 16 或 24 位 来 编 码 颜 色 信 息, 这
个 位 数 称 作 图 象 的 颜 色 深 度, 它 决 定 了 图 象 所 含 的 最 大 颜 色
数。 一 幅 1-bpp(位 每 象 素, bit per pixel) 的 图 象 只 能 有 两 种 颜 色。
而 一 幅 24-bpp 的 图 象 可 以 有 超 过 16 兆 种 不 同 的 颜 色。

 
都说完了.....
 
非常感谢大家的参与.确实我想从最原始的开始,Assign文件,reset打开,用的是BlockRead,读出来的第一个字母是B,第二个字母是m
,下面的信息就读的不正确,因为书本上是用的是C,它用了类型转换,将数据改成无符号长整形,我就不知道在Delphi如何用了?
 
为什么无符号的长整形就没法用了呀?
 
看来你是个用VC的人,别人都作好了事,何必自己再去做,
我是懒人,我才不管这些呢。

你到这里去慢慢看吧!或者去买程序员大本营2000光盘:
http://www.csdn.net/dev/Format/
 
如果单是显示图形用以上的方法应都可以了。下边的显示图形的例子与上边的代码大同小异:
var bmp:Tbitmap;
begin
bmp:=Tbitmap.create;
bmp.loadformfile('c:/windows/forest.bmp');
canvas.draw(10,10,bmp);
bmp.free;
end;
但要对bmp图形进行操作的话,有几个函数和属性是常用的,getpixel,和setpixelv,
它们分别是用来获得某个像素的颜色和设置某个像素的颜色。如:
getpixel(bmp.canvas.handle,10,10);
setpixelv(bmp.canvas.handle,10,10,rgb(200,200,200));
当然,你也可以通过bmp.canvas.pixels[10,10]来设置和获得色素
 
看msdn,你会有很大的收获
 
看看 VCL 源代码是非常有用的。
 
最后回答时间是 2001-9-5 21:30:00 ,问题解决了吗?
位图的结构全部在 Windows.pas 中有定义,而位图本身在 Graphics.pas 中。
TBitmapCoreHeader;
TBitmapCoreInfo;
TBitmapFileHeader;
TBitmapInfoHeader;
TBitmapInfo;
TBitmap
等等。Delphi 在 vcl 代码中已经全部实现。
 
后退
顶部