delphi 怎样将一个PByte类型 拷贝到内存,再将它们分配给bitmap 然后保存成bmp图像?
const    
    Width = 752;
    Height = 480; var ABitmap: TBitmap;
     myBuffer: PByte;begin
  ABitmap := TBitmap.Create;
  ABitmap.PixelFormat := pf24bit;
  ABitmap.Width := Width;
  ABitmap.Height := Height;    GetMem(myBuffer, SizeOf(pbyte));
    CopyMemory(myBuffer,ABitmap.ScanLine[Height - 1], Width * Height * 3);//这一句出错 请问该怎样拷贝内存?   ABitmap.SaveToFile(dlgSave1.FileName);
   ABitmap.Free;

解决方案 »

  1.   

    不明白你要把2段无内容的图像数据倒来倒去做什么:ABitmap.ScanLine[Height - 1]地址是只有底色的图像数据;myBuffer更是一堆随机数值,不知你拷贝的目的是什么?
      

  2.   


    我的myBuffer是有值的 是$40013600  就是想把myBuffer的内存拷贝给bitmap 不知道该怎么实现?
      

  3.   

    $40013600是myBuffer的地址,而不是图像数据!
    我不同你说了,我只告诉你正确的将myBuffer拷贝到ABitmap就行了:  stride = (ABitmap.Width * 3 + 2) and not 3; // 24位图像每行数据字节
      size = stride * ABitmap.Height;             // 图像总的字节数
      GetMem(myBuffer, size);                     // myBuffer里面是些乱七八糟的随机数
      CopyMemory(ABitmap.ScanLine[Height - 1], myBuffer, size);
      

  4.   

    To maozefa:非常感谢你 还有一点不明白 我是这样写的 为什么错误了? 运行提示错误 access violation at address..........
      GetMem(myBuffer, sizeof(pbyte));
      CopyMemory(ABitmap.ScanLine[Height - 1], myBuffer,  Width * Height * 3);  
      

  5.   

    sizeof(PByte)计算的是指针变量的内存大小,在32位编译器中恒等于4
    Width * Height * 3计算的是Width所需字节数,但不等于图像每行的字节数,图像每行的字节数必须是4的整倍数。
      

  6.   

    sizeof(PByte)计算的是指针变量的内存大小,在32位编译器中恒等于4
    Width * 3计算的是Width所需字节数,但不等于图像每行的字节数,图像每行的字节数必须是4的整倍数。