首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到Delphi调节器的FPC指针操作

到Delphi调节器的FPC指针操作
EN

Stack Overflow用户
提问于 2014-10-23 11:11:30
回答 2查看 232关注 0票数 2

我正在尝试调整一些代码以适应Delphi:

https://github.com/cooljeanius/doublecmd/blob/master/src/platform/win/ugdiplus.pas

原始函数(我已经删除了不相关的代码):

代码语言:javascript
复制
{$mode objfpc}
// ...
function GetBitmapFromARGBPixels(graphics: GPGRAPHICS; pixels: LPBYTE; Width, Height: Integer): GPBITMAP;
var
  pSrc, pDst: LPDWORD;
begin
  // ...
  pSrc := LPDWORD(pixels);
  pDst := LPDWORD(bmData.Scan0);
  // Pixels retrieved by GetDIBits are bottom-up, left-right.
  for x := 0 to Width - 1 do
    for y := 0 to Height - 1 do            
      pDst[(Height - 1 - y) * Width + x] := pSrc[y * Width + x];
  GdipBitmapUnlockBits(Result, @bmData);
end;

如何正确翻译这一行?(pSrc, pDstLPDWORD):

代码语言:javascript
复制
pDst[(Height - 1 - y) * Width + x] := pSrc[y * Width + x];

Delphi编译器显示错误:[Error] Unit1.pas(802): Array type required

我试过:

代码语言:javascript
复制
type
  _LPDWORD = ^_DWORD;
  _DWORD = array[0..0] of DWORD;
...
_LPDWORD(pDst)^[(Height - 1 - y) * Width + x] := _LPDWORD(pSrc)^[y * Width + x];

我不确定这是否正确?

或者这个?

代码语言:javascript
复制
PByte(Cardinal(pDst) + (Height - 1 - y) * Width + x)^ := PByte(Cardinal(pSrc) + y * Width + x)^;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-23 11:41:02

你可以这样做:

代码语言:javascript
复制
function GetBitmapFromARGBPixels(graphics: GPGRAPHICS; pixels: LPBYTE; Width, Height: Integer): GPBITMAP;
const
  MaxArraySize = MaxInt div sizeof(DWord);
type
  TLongDWordArray = array[0..pred(MaxArraySize)] of DWord;
  PLongDWordArray = ^TLongDWordArray;
var
  pSrc, pDst: PLongDWordArray;
begin
  // ...
票数 4
EN

Stack Overflow用户

发布于 2014-10-23 12:41:52

我认为在Delphi中解决这一问题的最简单方法是将编译配置为支持指针的索引:

代码语言:javascript
复制
{$POINTERMATH ON}

一旦包含了这个指令,原始代码就会编译。

遗憾的是,Delphi7中没有这个选项。您需要声明一个指向DWORD数组的指针,并对其进行转换。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26526758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档