関連記事
- 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時間かかった(汗
忘れないように書いておきます…
コメント
【#緊急非常事態】スマホを紛失した!amazonで買ったカナビラがぶっ壊れてスマホが消えた!
「君たちはどう生きるか」「ゴジラ-1.0」アカデミー賞を受賞
昼から雨だそうな.人が洗車すると..ブツブツ
【訃報】TARAKOさん急死 63歳 「ちびまる子ちゃん」を35年
【#訃報】漫画家 鳥山明さん死去 68歳 「DRAGON BALL」などで人気
たぬきケーキの人気再燃 レトロな魅力、再販する店も
【#株価】日経平均株価 終値で初の4万円台 史上最高値を更新(24/3/4)
睡眠「成人は6時間以上」 新ガイドは日本人の眠りを変えられるか
再起動不要でWindows 11をアップデートする機能、2024年後半に導入か
【#確定申告】さて,税務も終わった件