关于采集图像后造成存储空间不够的问题?(100分)

  • 主题发起人 主题发起人 johnnywww
  • 开始时间 开始时间
J

johnnywww

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在用一个线程处理图像卡采集图片,将它放到一个内存存储区,另外一个线程专门处理这个内存储存区,采集速度比处理速度要快,所以造成存储空间不够的问题,每采集一个图片为1.6M(Bitmap格式)请问各位大侠有什么好方法解决.
 
你不能加快处理速度吗?
比如:设置处理线程的等级,改变处理一次时的处理大小。。。。。
你也可以在采集的时候直接存放到硬盘,处理的时候再。。。。
 
我写了两个保存DIB->Bitmap的函数,两个都能实现将DIB内容放入Bitmap中,不过在处理的时候都有些慢,而且第一个还容易出现存储空间不够的问题,请各位看下有什么问题:
procedure TVideoCard.SaveDIBToBmp(PtBitmapInfoHeader: PBITMAPINFOHEADER; LpDIB:
LPSTR; Bitmap: TBitmap);
var
LpBitmapInfo: PBitmapInfo;
begin
if (Bitmap = nil) or (PtBitmapInfoHeader = nil) or (LpDIB = nil) then
Exit;

Bitmap.Width := PtBitmapInfoHeader.biWidth;
Bitmap.Height := PtBitmapInfoHeader.biHeight;

// NumberOfColors := PtBitmapInfoHeader.biClrUsed;
// BitCount := PtBitmapInfoHeader.biBitCount;
LpBitmapInfo := PBitmapInfo(PtBitmapInfoHeader);
StretchDIBits(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, 0, 0,
Bitmap.Width, Bitmap.Height, LpDIB, LpBitmapInfo^, DIB_RGB_COLORS, SRCCOPY);
Assert(Bitmap.HandleType = bmDDB);
end;


procedure TVideoCard.SaveDIBToBmp1(PtBitmapInfoHeader: PBITMAPINFOHEADER;
LpDIB: LPSTR; Bitmap: TBitmap);
var
LpBitmapInfo: PBitmapInfo;
dcPic: HDC;
hbm: HBitmap;
begin
if (Bitmap = nil) or (PtBitmapInfoHeader = nil) or (LpDIB = nil) then
Exit;
dcPic := GetDC(0);
hbm := CreateDIBitmap(dcPic, PtBitmapInfoHeader^,
LongInt(CBM_INIT),
LpDIB,
(PBitmapInfo(PtBitmapInfoHeader))^,
DIB_RGB_COLORS);
Bitmap.ReleaseHandle;
Bitmap.Handle := hbm;
ReleaseDC(0, dcPic);
end;
 
游戏中也有许多图像需要处理,它们同时都在内存中吗,它们是如何被处理的?
 
后退
顶部