通过点击按钮对bitmap(此bitmap为包含数字号码的图象)进行图象旋转,图象灰度变换等图象处理过程,最后通过神经网络进行图象中的数字识别,识别完不能释放GDI资源,因此连续点击按钮对多张数字图片识别将耗尽GDI资源,检查程序好象所有create的对象都free了。不知如何解决,请高手指点!

解决方案 »

  1.   

    "因此连续点击按钮对多张数字图片识别将耗尽GDI资源":好奇怪哦
      

  2.   

    以下函数作用是将24位位图转成8位灰度图,用memproof测得此函数耗掉了关于bitmap项2个单位的GDI资源,请问如何解决呢procedure DIB_GRAY256(var bitmap:Tbitmap);
    var
    pal: PLogPalette;
    hpal: HPALETTE;
    i,j:integer;
    pp:p24Bitmap;
    temp:byte;
    BMap:Tmatrix;
    begin
        BMap:=Tmatrix.create(bitmap.height,bitmap.width);//创建和bitmap同样大小的矩阵
        if bitmap.PixelFormat=pf24bit then
        begin
            //将 bitmap灰度值映射到BMap矩阵中
            for i:=0 to bitmap.Height-1 do
            begin
                pp:=bitmap.ScanLine[i];
                for j:=0 to bitmap.width-1 do
                begin
                    temp:=floor(pp[j].iBlue*0.114+pp[j].iGreen*0.587+pp[j].iRed*0.299); //0.114,0.587,0.299灰度转换
                    BMap.SetValue(i,j,temp);
                end;
            end;
            bitmap.Dormant;
            bitmap.FreeImage;
            bitmap.Monochrome:=true;
            bitmap.ReleaseHandle;
           //////重建8位位图                           
            bitmap.HandleType:=bmDIB;             
            bitmap.PixelFormat:=pf8bit;
            //************** 建灰度调色板
            pal := nil;
            try
                GetMem(pal, sizeof(TLogPalette) + sizeof(TPaletteEntry) * 255);
                pal.palVersion := $300;
                pal.palNumEntries := 256;
                for i := 0 to 255 do  //256colors gray palette
                begin
                    pal.palPalEntry[i].peRed:=i;
                    pal.palPalEntry[i].peGreen:=i;
                    pal.palPalEntry[i].peBlue:=i;
                end;
                hpal := CreatePalette(pal^);
                if hpal <> 0 then
                    Bitmap.Palette := hpal;
            finally
                FreeMem(pal);
            end;                             
            BMap.SaveValueToBitmap(bitmap);    
        end
        else
            showmessage('不是24位位图');
        BMap.free;
    end;
      

  3.   

    deleteobject(hpal )bitmap.Dormant;
    bitmap.FreeImage;
    bitmap.Monochrome:=true;
    bitmap.ReleaseHandle;
    ???