関連記事
- 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時間かかった(汗
忘れないように書いておきます…
コメント
【連休】連休なのであっちこっち回ってきた
参院選きょう投票 与野党どちらが過半数制するか 最大の焦点に(25/7/20)
【#南海トラフ地震】地震前「ゆっくり滑り」間隔半減 日向灘で初観測、予測へ成果
うむ,猛烈にダルい.完全に体調がおかしい
まぁ降るもんじゃ.強雨がずっと続いているぞー
【新燃岳】噴煙がめちゃくちゃ少なくなってる.いったん終わる方向じゃろか?(25/7/5)
【地震速報】鹿児島 悪石島で震度6弱 津波の心配なし(25/7/3)
【霧島山】新燃岳で噴火続く 噴煙2800メートルの高さに(25/7/2)