如何获得Timage的背景,有没有这样的函数或程序(50分)

  • 主题发起人 主题发起人 许阳
  • 开始时间 开始时间

许阳

Unregistered / Unconfirmed
GUEST, unregistred user!
1.如何获得Timage的背景,有没有这样的函数或程序
2.如何获得Timage的前景
3.如何区分前景和背景
 
Timage的背景?前景? 是什么啊?
Timage.Picture 有这个属性.
 
可能我的提法有问题,有没有这样的控件,可以区别前景图和背景图,就是说
例如:红色背景上有一个“我”字,我想只取“我”字,而不要红色背景。
 
timage只是一个图象控件,好象没有你说的那种情况,如果有请及时通知我,谢谢!
不过不知扫描机上的程序好象可以的。
 
唉,又是图像识别,这么人问,怎么就没人答呢
 
像那Graphic32控件组中的TImageLayer有Alpha通道,提供此图就可只显示'我' 字,
背景能透明,但一定要基于Timage上。

1stclass中的Timage也提供了Alpha通道的图像装载,但并没达到透明效果,效果同以前
版本的Graphic32中一样。

大家探讨一下。



 
我有个想法

你设定一个取字颜色范围参数

然后从timage里依次取得该颜色范围的象素

不过,这样是取不到一个字的

只能得到一个图像
 
谢谢各位关心:
我的意思是这样的,我把汉字放到image上,程序如下,
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Canvas.TextOut(10,10,'我');
end;
可不可以认为汉字是前景?如何取?
和大家讨论
 
不知道你要干什么,一会儿放'我',一会儿又要把'我'取出来
 
设有image1与image2,需要取image1的前景到image2中,已知image1的背景色为bcolor,可以这么写,不过速度较慢

for y:=0 to image1.height
begin
for x:=0 to image1.weight
begin
if not(image1.Canvas.Pixels[x,y]= bcolor) then image2.Canvas.Pixels[x,y]:=image1.Canvas.Pixels[x,y]
end;
end;
 
to:timerri
我用你的方法,请运行下程序,放两个image
procedure TForm1.BitBtn1Click(Sender: TObject);
var
x,y:integer;
begin
image2.Canvas.TextOut(10,10,'丂');
image1.Canvas.Font.Name:='楷体_gb2312';
image1.Canvas.TextOut(10,10,'丂');
for y:=0 to image1.Height do
begin
for x:=0 to image1.Width do
begin
if image2.Canvas.Pixels[x,y]=image1.Canvas.Pixels[x,y] then
begin
showmessage('ok');
end;
end;
end;
end;
为什么会比较的一样,image1是空白,image1的空白是什么(在特殊的汉字情况下)。
 
image中的属性transparent.你看一看他的帮助文件。
 
你还没有领会我的方法,其实说白了很简单,就是比较每个点是否为背景色,不是背景当然就是前景了,是前景的点就移动到另一个image中,背景的点就不移动。
这个方法把汉字也当图片处理,所以无论什么字都没问题。

你应该先把程序看懂再修改,像你那样的修改,每比较一个点你就要showmessage,也比不出个什么东西来。

你想要由图片来识别汉字,没有现成的可以用,要么你就从头研究,要么找做OCR的公司买技术。
 
你是说按颜色的色域选择的问题吧,就是跟photoshop中的差不多的吧,

如果这样的话,找一些有关图形处理的控件吧,多的是。
 
你是说按颜色的色域选择的问题吧,就是跟photoshop中的差不多的吧,

如果这样的话,找一些有关图形处理的控件吧,多的是。
 
当向一个image里面写上字符的时候

这个字符就变成了图像了

不过

flash里的文字不知道是怎样处理的

我猜它肯定是另外用了一个数据进行存储,要改变,变将那个数据改变

先删除以前的,再另画新的

于是,对于这个问题,我有个这样的想法

能不能在image里面再加一个属性,里面所存放的是字符的属性呢

通过对字符属性的修改来达到这种目的

我是菜鸟,都是瞎讲的,请各位不要见怪
 
to:timerri
你的意思我明白了,你是把前景和背景一起来比较,
image1.Canvas.Pixels[x,y] 是一个一个点。
帮我想想,我挺着急的。一般image显示背景色为clwhite,
当image1(上面我写的程序)中出现空白时image1.Canvas.Pixels[x,y]=clwhite
而一当有字时,image1.Canvas.Pixels[x,y]=clblack(字是黑色的)。依照这种
规律,我想只要image1.Canvas.Pixels[x,y]=clwhite,那么就没有这个字。我是
这样写的 。但不知道,如何取得道这个字。
for y:=0 to image2.Height do
begin
for x:=0 to image2.Width do
begin
if image2.Canvas.Pixels[x,y]=clblack then
begin

该处如何写,因为这里循环每一个点[x,y]
end
 
API函数SetBkMode和GetBkMode分别用于设置背景模式和取得背景模式
 
再看看我这一段
for y:=0 to image1.height-1
begin
for x:=0 to image1.weight-1
begin
if not(image1.Canvas.Pixels[x,y]= bcolor) then image2.Canvas.Pixels[x,y]:=image1.Canvas.Pixels[x,y];
end;
end;

运行完后,除去背景的图片就保存在了image2里
 
image是单层图象处理,应该不可以区分?
 
后退
顶部