関連記事
- 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時間かかった(汗
忘れないように書いておきます…

コメント
土砂降りじゃー 春の雨が降りまくってる
今週は天気が悪いっぽい.ようやっと雨が定期的に降りだした
【#花粉症】目が腫れてキターくしゃみも止まらん.いよいよ花粉もピークか?
【#衆議院選挙2026 】自民 316議席獲得 単独で3分の2超 中道は49議席
【#衆議院選挙2026 】自民単独で過半数大きく上回り300議席に達する可能性
【BW55T】UPSが死んだ...ドロドロドロ😭これは人類滅亡間違いなし!なので発注(爆
広島カープの羽月隆太郎容疑者、「ゾンビたばこ」使用の疑いで逮捕