关于图像的颜色过滤及图像保存到数组中问题! (100分)

Y

ymf

Unregistered / Unconfirmed
GUEST, unregistred user!
[blue][/blue]
1、有一幅RGB图像,背景是白色,如何把红色、绿色过滤掉并替换成背景色。

2、如何把一个二值图(黑白图象)的数据区保存到数一个一维数组中,保存时黑色为0,白色为1,
保存格式为:13位编号+3位图像高度+3位图像宽度+图像数据,
例如:图像编号为5301020000001,图像大小为(宽*高,像素):888*999
保存到数组中的格式为:5301020000001888999100101010101111000…………,
然后再把这个数组存到Access的OLE字段中。
反之,如何再把上面Access的OLE字段的图像内容再读到数组里呢?

[green][/green]请各位DFW帮忙,[purple][/purple]先谢了!


 
1 问题1
把图装进image1
for y:=0 to image1.height-1 do
for x:=0 to image1.width-1 do
case image1.Picture.Bitmap.Canvas.Pixels[x,y] of
clred:image1.Picture.Bitmap.Canvas.Pixels[x,y]:=clwhite;
clgreen:image1.Picture.Bitmap.Canvas.Pixels[x,y]:=clwhite;
end;
问题2太麻烦,不写了。
 
问题2很有意思。
 
to 白河愁
老兄,比如说要滤掉RGB值为255,0,0至255,0,100的红色怎么办呀?
第二个问如果嫌麻烦的话可以说一下解决步骤呀!
 
1
case image1.Picture.Bitmap.Canvas.Pixels[x,y] of
$ff0000..$ff0064:image1.Picture.Bitmap.Canvas.Pixels[x,y]:=clwhite;
end;

2 用image1.Picture.Bitmap.Canvas.Pixels[x,y]得到颜色数据。
 
可用Canvas.Pixels 或 Canvas.scanline
 
第一问,如果是这个意思的话,可以用排除法,
type
TRGBArray=Array [0..32767] of TRGBTriple;
pRGBArray=^TRGBArray;
。。。
var
i,j:integer;
PRGBArrayTem:pRGBArray;
。。。
for j:=0 to ImageSrc.Picture.Bitmap.Height-1 do
begin
PRGBArrayTem:=Image1.Picture.Bitmap.ScanLine[j];
for i:=0 to Image1.Picture.Bitmap.Width-1 do
if (PRGBArrayTem.rgbtRed=255 or PRGBArrayTem.rgbtGreen=255)
begin
PRGBArrayTem.rgbtBlue:=255;
PRGBArrayTem.rgbtRed:=255;
PRGBArrayTem.rgbtGreen:=255;
end;
end;

 
上面掉了一个then,第二问期待中。。。
 
又看了一下
"老兄,比如说要滤掉RGB值为255,0,0至255,0,100的红色怎么办呀?"
如果你只想去掉红色的话
image1.Picture.Bitmap.Canvas.Pixels[x,y] and $ffff 就可以了。
 
TO 白河愁,
你回答第一题答案我试一下
第二问题你说用Pixels[x,y],那如何如何把数组存到数据库中呢?

to jinmen
我试一下

TO xyl999
Canvas.scanline怎么用?

 
怎么存?
普通数据怎么存就怎么存.
image1.Picture.Bitmap.Canvas.Pixels[x,y]是一个integer.
 
用SCANLINE把黑白的图形数据读出来!
 
to cdyxl
读出来以放到数组里怎么存到存到数据库里呢?
存了以后再读的时候如何再把图像显示出来呢?
 
其实用TBitmap.ScanLine比较好,你搜索以下ScanLine就知道了。
 
怎么存到数据库这种问题不是在图形图象区问的吧?
 
to 白河愁
存成一个文件也行
 
tbitmap.savetofile不就行了。
用的时候是 tbitmap.loadfromfile
 
老白呀
我存的时候只能按我的这个格式存,13位编号+3位图像高度+3位图像宽度+图像数据,
图像数据只存数据区,不存位图文件头等信息
如果用savetofile存的话是不能把13位编号+3位图像高度+3位图像宽度一起存的
 
不存信息头?你确定要存的文件都是没有调色板的BMP?
那就在savetofile之后打开那个文件
然后把前52个字节删掉,而插入你的"13位编号+3位图像高度+3位图像宽度"
吧,不要说不会文件读写......
 
老白
是的,只保存数据,怎么把文件头、调色版都去掉,再加上我的内容保存,请指教!
 
顶部