textout后的文字的颜色为什么不是自己指定的颜色?(我很穷,只有50分)(50分)

  • 主题发起人 主题发起人 来如风
  • 开始时间 开始时间

来如风

Unregistered / Unconfirmed
GUEST, unregistred user!
iamge1.canvas.font.color:=clred;
image1.canvas.textout(……);
其中image1中有图象了比如说是windows下的cloud.bmp,此时显示出来的文字为什么不是
我所指定的颜色,而字体大小却是我自己指定的大小?
请问该如何设置呢?还有如果我要是想让某一区域闪烁该怎么办?
 
不会变色啊!

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Image1.canvas.font.color:=clred;
Image1.canvas.textout(10,10,'hello');
end;
 
原因:你的image可能是256色或者16色的!
换用一个24位真彩色的图就可以了。
 
语句应该没问题。可能设置的图像调色板中没有该颜色。
闪烁:定时改变颜色。
 
to:caowei
如果换图的话可能不怎么好吧,而且我想要知道的一种通用的方法而不是变换图片自身的
格式
to:jsxjd
“语句应该没问题。可能设置的图像调色板中没有该颜色”?那么该如何设置?清楚
一点怎么样?

 
要让图象的某一部份闪烁的方法很简单,就是利用Shape控件。定时让Shape闪烁不就OK了。
至于你说的文字不变色,
我在我机器上已经试过了,不管是什么样的BMP,都可以变色呀!
Win98第一版+D6(Update2)
 
你是不是设了Image的Transparent,
还有个问题:你是如何直接给我发消息的
 
先用黑色试一试,看看有没有问题,如果有问题那就不是图片的问题。建议换几种颜色
试试。先确定问题在哪里?因为我在显字就没遇到过这样的事。
 
颜色我都试过了,就是不行,而且背景色也不是我所设定的,是不是还要根据图片的底色
进行相应的操作?
我用的图片的windows下的蓝天白云的那张,出来的字体色老是蓝色
 
是不是你的图片只有2色?
如果是的话,那字体色彩只能为黑与白,并且,DELPHI会把非黑色的颜色全认为是白色。
你的字体显示出来的是什么颜色?
 
我的代码和你的一样:
Image1.Canvas.Font.Color:=clBlue;
Image1.Canvas.TextOut(10,10,'I am LeonSu');
Image上面有一张图(安装程序.bmp),
事实上,我试过好几张,从2色至24位色,除了2色以外,其余的都通过。
另外,为什么我看不到图标(在你的名字旁边),我现在是IE6,热情型界面!
 
我说我找到那张蓝天白云了,结果和你的一样,
只有light blue,没有红色,我想可能和图片是256色有一定关系。
大家都可以去试试。
 
那张蓝天白云的格式是DDE(设备相关位图,它的配色板只有两种色,白与蓝),而我们现
在大部份都是DIB(设备无关位图,配色板是操作系统的事)。
 
谢谢leonsu,分还是给你吧,
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
type
LogPal = record
lpal : TLogPalette;
dummy:Array[0..255] of TPaletteEntry;
end;
var
SysPal : LogPal;
tempCanvas: TCanvas;
notused: HWnd;
begin
tempCanvas := TCanvas.Create;
tempCanvas.Handle := GetDeviceContext(notUsed);

SysPal.lPal.palVersion:=$300;
SysPal.lPal.palNumEntries:=256;
GetSystemPaletteEntries(tempCanvas.Handle,0,256,SysPal.lpal.palPalEntry);

Image1.Canvas.Font.Color:=clRed;
Image1.Canvas.Font.Size:=30;
Image1.Picture.Graphic.Palette:=CreatePalette(Syspal.lpal);
Image1.Canvas.TextOut(10,10,'Leon.Su');
tempcanvas.free;
end;

end.
这只是一个小例子,不完美,可以做一点引导.
 
看的不怎么懂,你是怎么想出来的?
而且这种方法应该是通用的了,当是觉得稍显麻烦了一些了,不过还好,多数图片
都可以直接textout的
 
不知道如何想到的。可能是这样,前两天写了一个控件,用了CANVAS,写完了以后觉得不
十分满意,就看了看书《DELPHI5开发人员指南》,这上面有讲DDB(设备相关的位图)与
DIB(设备无关的位图),我在大学时曾和一个同学非常详细的研究过BMP格式,知道它的
调色板到底是怎么回事,根据你说的WINDOWS下的那个蓝天白天图,我看了一下,发现他是
256色的,同时它的调色版好象不太对,我向上TEXTOUT时除了蓝色就是白色,这种情况与
在两色BMP上进行TEXTOUT时完全相同(在两色BMP上用TEXTOUT,除黑色外,其余颜色全部
认为是白色,不信可以试试),所以,我初步判断那张图在调色版上有问题,用API把它的
调色版换掉,应该就OK了。另一方面,DELPHI中调色版的定义是Palette,于是就找帮助中
关于Palette的内容,结果在Bitmap.Palette中找到了一个Example,最后将例子稍改一下,
就成了上面的例子了,就连变量名与类都是完全照抄的。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
748
import
I
后退
顶部