首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请教怎么遍历bmp图片的所有象素(二值图),

2012-03-23 
请问如何遍历bmp图片的所有象素(二值图),在线等!如图,我有一段代码functionMyScout(Bitmap:TBitmapDatase

请问如何遍历bmp图片的所有象素(二值图),在线等!
如图,我有一段代码
function   MyScout(Bitmap:   TBitmap;Dataset   :Tdataset):Boolean;
var     X,   Y:   integer;
    O:   pByteArray;
    newbmp:   TBitmap;
begin
    newbmp   :=   TBitmap.Create;
    newbmp.PixelFormat   :=   bitmap.PixelFormat;
    newbmp.Assign(bitmap);
    for   Y   :=   0   to   newbmp.Height   -   1   do
    begin
        O   :=   bitmap.ScanLine[Y];
        for   X   :=   0   to   newbmp.Width   -   1   do      
        begin
            if   o[x]=255   then     //白色点
            begin
                //处理代码
            end;
        end;
    end;
end;

好像这个newbmp.width   不是o数组的下标上限
而且我在画图程序里大概确定第一个白点的位置是(16,12),通过上面的代码查找变成了(51,12)

我是delphi新手,处理bmp图片也是昨天才试试的


[解决办法]
我记得有个函数叫做PixPos(X,Y)
获取Pos上的Pix信息,但是不记得是不是BitMap类的了,可能是Canvas类
[解决办法]
if o[x]=255 then //白色点
begin
//处理代码
end;
判断白点不是这样的
把255改成clWhite
[解决办法]
看你的图像是什么格式的,24bit? 8bit? 如果是8bit,图像的颜色是基于调色板的,也不会是255。
[解决办法]
BMP格式的数据是逆序存储的,即在内存中最下面一行的数组在图像数据的最开始,所以你看下是不是有这个关系 newbmp.Width-51=16

还有从 for X := 0 to newbmp.Width - 1 do 这句似乎可以看出你的图像是8位色的。
[解决办法]
、、还有从 for X := 0 to newbmp.Width - 1 do 这句似乎可以看出你的图像是8位色的。
这个我说错了!
[解决办法]

热点排行