関連記事
- Delphi5をWindows7 64ビット環境に突っ込んでみた 【2011年01月15日(土)】
- NET FRAMEWORKのソケット通信 【2010年11月30日(火)】
- 不具合じゃ不具合じゃ! 【2008年05月28日(水)】
- IXMLDOMNodeの検索PGサンプル 【2008年05月22日(木)】
- IXMLDOMDocumentのインスタンス 【2008年01月30日(水)】
C言語あたりだと、ポインタ≒配列なんで、
char *a; a = new char[256]; a[0] = 'a'; a[1] = 'b';とか、ポインタを配列の書式でアクセスするの
わりと、簡単にできますが
Delphiは難しい
構造体が絡むと一段と難しい
とりあえず、こんな感じ
TBitmap.ScanLineプロパティを構造体でアクセスしたい時の例
type
TPixel24 = packed record B, G, R: Byte; end; //24ビット画像構造体
TPixel24Array = array[0..65535] of TPixel24; //<★★[0...65535]のあたり重要★★
PPixel24Array = ^TPixel24Array;
...
//グレースケール処理なぞ
procedure TImageJobAnalyze.ToGrayScale24(const sou : TBitmap; des: TBitmap);
var
y : Integer;
x : Integer;
b : byte;
sp : PPixel24Array;
dp : PPixel24Array;
begin
for y := 0 to sou.Height - 1 do
begin
sp := sou.ScanLine[y];
dp := des.ScanLine[y];
for x := 0 to sou.Width -1 do
begin
b := Round( sp[x].R * 0.298912 +
sp[x].G * 0.586611 +
sp[x].B * 0.114478);
dp[x].R := b;
dp[x].G := b;
dp[x].B := b;
end;
end;
end;
[/delphi]
こんな感じ。
配列型とポインタ型と定義するとこ
TPixel24Array = array[0..65535] of TPixel24;
PPixel24Array = ^TPixel24Array;
を
TPixel24Array = array of TPixel24; //動的配列にて定義
PPixel24Array = ^TPixel24Array;
などと動的配列として、定義しちゃうと、アドレス違反で落ちます
これにハマってた
なお
TPixel24Array = array[0..65535] of TPixel24;
は、型として定義されるだけで、実際にメモリを確保するわけではないんで、ご安心を
ただし
var
aryValue : TPixel24Array ;
なんて、やっちゃうとメモリ確保に行きます
これ、探し出すのに2時間かかった(汗
忘れないように書いておきます…
コメント
【大地震】カムチャツカ半島沖合で地震 マグニチュード7.5と推定(25/9/13)
台風一過なのに今日も猛暑予想.秋が来ないぞい
【霧島山】新燃岳が噴火 噴煙高度火口上5500m(25/8/28)
日産「GT-R」生産終了 スポーツカーの開発環境 厳しさ増す
火球か?隕石か?「夜なのに明るく」「カメラが真っ白になるほどの光」九州や西日本各地で目撃あいつぐ 空気の振動も観測
ひょっとして,大規模にやらかしてました?ぎんゆぅ~さん,落ちてた模様(爆