图形 ( 积分: 100 )

  • 主题发起人 主题发起人 yanmin11003
  • 开始时间 开始时间
Y

yanmin11003

Unregistered / Unconfirmed
GUEST, unregistred user!
1.怎么把字符转点阵.需要他的算法思想,能否具体的讲讲
2.我在painbox画图的时候,其它窗体拦住再移开的话,拦住的部分什么消失,是怎么回事.
3.第二个问题若要解决的话,应该怎么解决这问题
4.什么是句柄,在做图的什么情况下需要用到句柄
5.TBitmao.scanline[][]是什么属性,其具体的函义
 
2:原因是你没有及时重画
3:解决方法要不停的重画,在OnPaint事件中,FORM事件、painbox事件都行,最好是painbox
4:句柄是Handle,是窗体的在系统中的唯一标识(注:是窗体,不是窗口),也就是
一个对象的指针(理解为内存地址)。如果控件有handle没有Canvas(如:Panel),
你就要用到Handle,然后GetDC,开始画。
5:scanline[j]返回值是指针,是第i行,第j个象素的地址,读取相应值,取得它的
RGB值
 
4.控件没有Canvas,要取得句柄,并且画画,怎么来使用这个句柄来执行绘画,详细讲讲,我是一个新手,
5怎么来读取RGB的值,其中scanline是Tbitmap类下的属性
 
论坛中可以找到答案
 
1.一般用点阵字库都是取现成的字库文件,按照格式读出来,非要自己生成点阵的话用手描不是个好办法,下面的代码段可以试试.
const
PointSize = 24;

type
TPointFont = array [1..PointSize, 1..PointSize] of Boolean;

function GetPointFont(const s: string): TPointFont;
const
DestRect: TRect = (Left: 1; Top: 1; Right: PointSize; Bottom: PointSize);
var
c1, c2: TCanvas;
h: HWnd;
SourRect: TRect;
i, j: Integer;
begin
c1:=TCanvas.Create;
try
c1.Handle:=Form1.GetDeviceContext(h);
c1.TextOut(1, 1, s);
SourRect.Left:=1;
SourRect.Top:=1;
SourRect.Right:=c1.TextWidth(s);
SourRect.Bottom:=c1.TextHeight(s);

c2:=TCanvas.Create;
try
c2.Handle:=Form1.GetDeviceContext(h);
c2.CopyRect(DestRect, c1, SourRect);
FillChar(Result, SizeOf(Result), 0);
for i:=1 to PointSize do
for j:=1 to PointSize do
Result[i, j]:=c2.Pixels[i, j]=c2.Font.Color
finally
c2.Free
end
finally
c1.Free
end
end;
至于点阵格式不一定非要用Boolean数组,也可以用一个字节的8位来分别表示,这么写完全是为了阅读方便.
 
2.3看红天的吧
4.控件没有Canvas,要取得句柄,并且画画,怎么来使用这个句柄来执行绘画,详细讲讲,我是一个新手.
控件没有Canvas的时候,就造一个Canvas给它用,造法如下:
var
DC: HDC;
Canvas: TCanvas;
begin
DC:=GetDC(Button1.Handle);
try
Canvas:=TCanvas.Create;
try
Canvas.Handle:=DC;
//这里就可以用Canvas做爱 做的事了.
finally
Canvas.Free
end
finally
ReleaseDC(Button1.Handle, DC)
end
end;
想给哪个控件造Canvas,就用它的名字替换掉Button1就可以了.
 
5.ScanLine返回的是某行图象数据的首指针,要想通过该指针访问行内特定列的颜色值,必须配合pixformat属性来决定每个像素所占用的位数.比如24Bit的占三个字节,首指针后跟的依次是第一像素的B值,第一像素的G值,第一像素的G值,第二像素的B值...
不是每种格式都能取出RGB的,比如黑白位图.
 
控件没有Canvas,要取得句柄,并且画画,怎么来使用这个句柄来执行绘画,详细讲讲,我是一个新手.
控件没有Canvas的时候,就造一个Canvas给它用,造法如下:
var
DC: HDC;
Canvas: TCanvas;
begin
DC:=GetDC(Button1.Handle);
try
Canvas:=TCanvas.Create;
try
Canvas.Handle:=DC;
//这里就可以用Canvas做爱 做的事了.
finally
Canvas.Free
end
finally
ReleaseDC(Button1.Handle, DC)
end
end;
想给哪个控件造Canvas,就用它的名字替换掉Button1就可以了
 
多人接受答案了。
 
后退
顶部