请问在delphi中是否可以将字体或窗口翻转(就是镜子中看到的那种)(200分)

  • 主题发起人 主题发起人 老莫
  • 开始时间 开始时间
Another_eYes和tqz,两位对图象处理好象比较熟,我这方面不行,二位的sample<br>也看不太懂。读了些已答问题,似乎有了一点开窍,但还是对一些方法还是不甚<br>了解。二位能否解答一下。<br>bitblt(bmp.canvas.handle,0,0,bmp.width,bmp.height,dc,0,0,srccopy);<br>这是api么?我看了二位为别人写的sample,它的功能好象是把一个dc画到另一个dc<br>中,那么它与canvas的copyrect有什么区别呢?<br>双缓存是不是这样的:将一个位图先读到内存中的一个tbitmap对象中,再用bitblt写到输出容器中。<br>scanline[]是做什么用的,我看了delphi的帮助,写得很简单,我没搞懂。<br>另外,memo部件如果在窗口可见部分的外边,我是否也能截获其显示的内容?<br>不好意思,一次问了这么多,小弟的问题解决了,一定把分数分给大家。
 
bitblt和canvas.copyrect有区别: copyrect用的是stretchblt api. 比bitblt功能强.<br>双缓冲是指: 对屏幕位图的操作, 是先在一个缓冲区中进行, 等所有修改都完成了, 再一次性写到<br>屏幕上.<br>scanline: 顾名思义, 是指一幅位图按行来访问啦.其实scanline是个指针数组, 每个元素指向<br>位图中的每一行.<br>memo在窗口可见部分之外可以取到显示的内容, 不过是你自己画. 可以通过两次调用DrawText实现:<br>第一次取得整个文本输出所需要的高度和宽度(宽度默认可以取memo.width), 然后申请一个TBitmap, <br>设定该高度和宽度. 第二次画到你的bitmap中. 显示时根据需要显示这个bitmap的不同部分.<br><br>To tqz:<br>&nbsp; label有滚动条吗? 如果真的是label, paint中也不必inherited paint, 而是直接用textout(or drawtext). 总之是不会闪烁的.
 
终于连上大富翁了,承蒙各位大侠相助,兄弟的大部分问题都pass了,连带对图形操<br>作也有了一定了解。<br>还有最后一个qustion:<br>我在建立一个tbitmap对象时如何指定pixel的格式是pf1bit或pf4bit或pf8bit,<br>可以使生成的位图尺寸小一些。我好象听说bitmap的色深是由系统当前设定决定的,<br>但我现在无论怎样调整显卡的颜色数,生成的位图都是pf24bit。<br>这个问题搞定后马上分配分数。<br><br>
 
bitmap1.pixelformat := pf24bit;<br>bitmap1.pixelformat := pf16bit;<br>bitmap1.pixelformat := pf8bit;<br>
 
请帮我看看这段程序错在哪?我改了tqz的例子,以翻转单色的位图。<br>membitmap的Monochrome属性为true,它是单色的,temp是byte类型的变量。<br>membitmap.pixelformat:=pf1bit;<br>for i:=0 to MemBitmap.Height-1 do<br>&nbsp;for j := 0 to (MemBitmap.Width - 1) div 2 do<br>&nbsp;begin<br>&nbsp;Move(PByteArray(MemBitmap.ScanLine)[j],Temp,1);<br>&nbsp;Move(PByteArray(MemBitmap.ScanLine)[MemBitmap.Width-j-1],PByteArray(MemBitmap.ScanLine)[j],1);<br>&nbsp;Move(Temp,PByteArray(MemBitmap.ScanLine)[MemBitmap.Width-j-1],1);<br>&nbsp;end;<br>
 
单色的一个像素占1位啊,我的程序是给24位彩色用的,一个像素占3个字节。
 
虽然翻转单色位图的方法还不会,但我的问题已经解决了,现在加分。
 
多人接受答案了。
 
这个问题,我想还是从Tfont下手比较好!带我做好试验在贴!
 
后退
顶部