如题,请高手帮帮忙。
解决方案 »
- [求助]--------如何将远程SQL的数据读到本地内存?(高人请进)
- 分享QQ上自己刚发现的一个有趣的东西,并讨论下是什么原理
- 初学DELPHI,请教XML的问题
- Delphi 6.0的一个大Bug????
- 菜鸟问题:在Delphi对TListView获取帮助,显示Clx Reference 与 Vcl Reference,它们之间有什么差别?
- 关于ADO和ODBC兼容的问题,数据库高手看过来,在线等(解决马上结贴)
- 自定义报表预览时,如何按点一下鼠标便放大或缩小?qrpreview控件
- 求关于注册表操作得到qq路径的一段代码
- fastreport统计问题?
- 我下载
- 求助,用rave制作多表报表
- DBLOOKUPCOMBOBOX 如果我点击过,上面永远有值了,如何去掉这个值?谢谢大虾,一定给分,虽然分数少!偶新手分不多
var
Green, Blue ,Red :byte;
i: integer;
begin
if Image1.Canvas.Pixels[0,0] = clWhite then
ShowMessage('白');
//取各个颜色值
i := image1.Canvas.Pixels[0,0];
Blue := GetBValue(i);
Green := GetGValue(i);
Red := GetRValue(i);end;procedure TForm1.Button2Click(Sender: TObject);
var
i, j:integer;
begin
for i:= 0 to Image1.Width do
for j:= 0 to Image1.Height do
begin
if Image1.Canvas.Pixels[i,j] <> clWhite then
begin
ShowMessage('含有非白色');
Exit;
end;
end;
end;
function BmpIsWhile(bmp: TbitMap): boolean;
type
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..32767] of TRGBTriple;
var
x, y: integer;
p0: PRGBTripleArray;
sBmp, dBmp: TBitMap;
begin
Result := False;
Bmp.PixelFormat := pf24bit;
for y := 0 to Bmp.Height - 1 do
begin
p0 := Bmp.ScanLine[y];
for x := 0 to Bmp.Width - 1 do
if (p0[x].rgbtBlue = 255) and
(p0[x].rgbtGreen = 255) and
(p0[x].rgbtRed = 255) then
begin
Result := True;
end
else
begin
Result := False;
Exit;
end;
end;
end; if BmpIsWhile(Image1.Picture.Bitmap) then
showmessage('图片是白色');
毛哟,
图像的显示最后都要转成RGB对应的
如果觉得用ScanLine慢了
你可以开几个线程一起判断三
但是还是得每个象素都读一遍可以试试用散列的方式,
ScanLine读取一行以后,用一定的算法得出每一行的校验码
然后拿校验码来进行比较
不过,一点一点地从显存读数据确是很慢的,应该用Scanline来整行整行读数据,
如要更快,可把整个图像由文件直接读到内存,再来查每一行每一个像素.