Delphi

メールの詳細(トピック表示)

XE3 + FireMonkeyでScanlineプロパティが消えた?

投稿者:Gracix [takefumi-o]さん  2012/09/25 11:15  MLNo.2740   [メール表示]

こんにちは。太田です。


XE3を入れて、FireMonkeyでTBitmapをいじっているのですが、
Scanlineプロパティが未定義になります。
(XE2までは正常にコンパイルできていたコードです。)

ヘルプの「FMX.Types.TBitmap」のページには

----

TBitmap はピクセル単位(Pixels、ScanLine)で操作やカスタマイズを行うことができます。低レベルでカスタマイズを行うには、カラー
ビット(StartLine)を使用します。

----

と書かれています。

どんな扱いになったのか、詳しい方教えて下さい。


太田剛文


Gg[ubN}[N


  • MLNo.2741   hosokawaさん  (0) 2012/09/25 11:25  [メール表示する]
    太田さん

    こんにちは。
    細川です。

    ざっとソースを見た限りだと、もっと洗練された方法に変わってますね。

    TBitmap.map メソッドを使って TBitmapData を取得し、TBitmapData.Data^ でアクセ
    スできるっぽいです(まだ試してないです)




    On Tue, 25 Sep 2012 11:15:08 +0900 (JST)
    "Gracix [takefumi-o]" <delphi-users@…> wrote:

    > こんにちは。太田です。
    >
    >
    > XE3を入れて、FireMonkeyでTBitmapをいじっているのですが、
    > Scanlineプロパティが未定義になります。
    > (XE2までは正常にコンパイルできていたコードです。)
    >
    > ヘルプの「FMX.Types.TBitmap」のページには
    >
    > ----
    >
    > TBitmap はピクセル単位(Pixels、ScanLine)で操作やカスタマイズを行うことができます。低レベルでカスタマイズを行うには、カラー
    > ビット(StartLine)を使用します。
    >
    > ----
    >
    > と書かれています。
    >
    > どんな扱いになったのか、詳しい方教えて下さい。
    >
    >
    > 太田剛文
    >
    >
    > MLホームページ: http://www.freeml.com/delphi-users
    >
    > ----------------------------------------------------------------------
    > 練習や試合の予定調整は「とっとと決め太郎」におまかせ!
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=iTbrR
    > ------------------------------------------------------[freeml byGMO]--


    Regards,
    HOSOKAWA Jun
    [S/G] SERIALGAMES Inc.
    TEL: 03-5812-0980
    FAX: 03-5812-0970
    twitter: http://twitter.com/serialgames
    twitter: http://twitter.com/flaver_sg
    mailto: jun@…
    fla:ver http://flaver.jp/
    WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria

  • MLNo.2742   hosokawaさん  (0) 2012/09/25 11:43  [メール表示する]
    太田さん

    細川です。

    試してみました。
    こんな感じでいけますね。

    もし、今までのコードを弄りたくないのであれば、class helper を作って ScanLine
    を実装するといいのではないでしょうか。
    ScanLine とは仕組みが違うので、ScanLineBegin, ScanLineEnd みたいなメソッドを
    作る必要があると思いますが……

    ----------------------------------------------------------------------------

    procedure TForm1.FormCreate(Sender: TObject);
    const
    BMP_WIDTH = 640;
    BMP_HEIGHT = 480;
    type
    PDWordArray = ^TDWordArray;
    TDWordArray = array [0.. 1] of DWORD;
    var
    X, Y: Integer;
    YAddr: Integer;
    begin
    FBmp := TBitmap.Create(BMP_WIDTH, BMP_HEIGHT);

    FBmp.Map(TMapAccess.maWrite, FBmpData);
    try
    // PixelFormat が pfA8R8G8B8 前提
    for Y := 0 to BMP_WIDTH - 1 do begin
    YAddr := Y * BMP_HEIGHT;

    for X := 0 to BMP_HEIGHT - 1 do
    PDWordArray(FBmpData.Data)[YAddr + X] := $80ff0000; // 半透明の赤
    end;
    finally
    FBmp.Unmap(FBmpData);
    end;
    end;

    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    FBmp.Free;
    end;

    procedure TForm1.FormPaint(
    Sender: TObject;
    Canvas: TCanvas;
    const ARect: TRectF);
    begin
    // 半透明の赤が描画される
    Canvas.DrawBitmap(
    FBmp,
    TRectF.Create(0, 0, 640, 480),
    TRectF.Create(0, 0, 640, 480),
    1);
    end;

    ----------------------------------------------------------------------------




    On Tue, 25 Sep 2012 11:25:16 +0900 (JST)
    hosokawa <delphi-users@…> wrote:

    > 太田さん
    >
    > こんにちは。
    > 細川です。
    >
    > ざっとソースを見た限りだと、もっと洗練された方法に変わってますね。
    >
    > TBitmap.map メソッドを使って TBitmapData を取得し、TBitmapData.Data^ でアクセ
    > スできるっぽいです(まだ試してないです)
    >
    >
    >
    >
    > On Tue, 25 Sep 2012 11:15:08 +0900 (JST)
    > "Gracix [takefumi-o]" <delphi-users@…> wrote:
    >
    > > こんにちは。太田です。
    > >
    > >
    > > XE3を入れて、FireMonkeyでTBitmapをいじっているのですが、
    > > Scanlineプロパティが未定義になります。
    > > (XE2までは正常にコンパイルできていたコードです。)
    > >
    > > ヘルプの「FMX.Types.TBitmap」のページには
    > >
    > > ----
    > >
    > > TBitmap はピクセル単位(Pixels、ScanLine)で操作やカスタマイズを行うことができます。低レベルでカスタマイズを行うには、カラー
    > > ビット(StartLine)を使用します。
    > >
    > > ----
    > >
    > > と書かれています。
    > >
    > > どんな扱いになったのか、詳しい方教えて下さい。
    > >
    > >
    > > 太田剛文
    > >
    > >
    > > MLホームページ: http://www.freeml.com/delphi-users
    > >
    > > ----------------------------------------------------------------------
    > > 練習や試合の予定調整は「とっとと決め太郎」におまかせ!
    > > http://ad.freeml.com/cgi-bin/sa.cgi?id=iTbrR
    > > ------------------------------------------------------[freeml byGMO]--
    >
    >
    > Regards,
    > HOSOKAWA Jun
    > [S/G] SERIALGAMES Inc.
    > TEL: 03-5812-0980
    > FAX: 03-5812-0970
    > twitter: http://twitter.com/serialgames
    > twitter: http://twitter.com/flaver_sg
    > mailto: jun@…
    > fla:ver http://flaver.jp/
    > WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria
    >
    >
    > MLホームページ: http://www.freeml.com/delphi-users
    >
    > ----------------------------------------------------------------------
    > 毎日豪華プレゼントキャンペーン開催中!くまポン
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=iTb0J
    > ------------------------------------------------------[freeml byGMO]--


    Regards,
    HOSOKAWA Jun
    [S/G] SERIALGAMES Inc.
    TEL: 03-5812-0980
    FAX: 03-5812-0970
    twitter: http://twitter.com/serialgames
    twitter: http://twitter.com/flaver_sg
    mailto: jun@…
    fla:ver http://flaver.jp/
    WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria

  • MLNo.2744   Gracix [takefumi-o]さん  (0) 2012/09/25 14:07  [メール表示する]
    細川さん、さっそくありがとうございます。

    できました!
    TBitmapDataにマップしてから書き戻す形になるんですね。


    以下がテストしたコードです。

    配列はPAlphaColorArrayを使って書いてみました。


    FBmp.Map(TMapAccess.maWrite, BmpData);
    for Y := 0 to FBmp.Height - 1 do
    begin
    YAddr := Y * FBmp.Height;
    for X := 0 to FBmp.Width - 1 do
    begin
    PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    end;
    end;
    FBmp.Unmap(BmpData);


    調べたらCanvas.Pixelsもなくなっているようですね。

    変えるのはいいですが、どこかに書いておいてほしいものです。(; ;


    太田剛文

  • MLNo.2745   hosokawaさん  (0) 2012/09/25 14:13  [メール表示する]
    太田さん

    細川です。

    pixels は TBitmapData.GetPixle, SetPixel として実装されていますね。

    ちなみに、僕が書いたコードが悪いのですが、下の行掛けるものは Width です……。
    すみません。

    YAddr := Y * FBmp.Height; // Y * FBmp.Width

    たしかに、今のところ、変更箇所はコードを見ないといけないので不便ですね。



    On Tue, 25 Sep 2012 14:07:53 +0900 (JST)
    "Gracix [takefumi-o]" <delphi-users@…> wrote:

    > 細川さん、さっそくありがとうございます。
    >
    > できました!
    > TBitmapDataにマップしてから書き戻す形になるんですね。
    >
    >
    > 以下がテストしたコードです。
    >
    > 配列はPAlphaColorArrayを使って書いてみました。
    >
    >
    > FBmp.Map(TMapAccess.maWrite, BmpData);
    > for Y := 0 to FBmp.Height - 1 do
    > begin
    > YAddr := Y * FBmp.Height;
    > for X := 0 to FBmp.Width - 1 do
    > begin
    > PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    > end;
    > end;
    > FBmp.Unmap(BmpData);
    >
    >
    > 調べたらCanvas.Pixelsもなくなっているようですね。
    >
    > 変えるのはいいですが、どこかに書いておいてほしいものです。(; ;
    >
    >
    > 太田剛文
    >
    >
    > MLホームページ: http://www.freeml.com/delphi-users
    >
    > ----------------------------------------------------------------------
    > Wポイントでますますおトク!賢くネットショッピングしよう!
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=iTdVB
    > ------------------------------------------------------[freeml byGMO]--


    Regards,
    HOSOKAWA Jun
    [S/G] SERIALGAMES Inc.
    TEL: 03-5812-0980
    FAX: 03-5812-0970
    twitter: http://twitter.com/serialgames
    twitter: http://twitter.com/flaver_sg
    mailto: jun@…
    fla:ver http://flaver.jp/
    WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria

  • MLNo.2829   Yuzuruさん  (0) 2012/10/27 18:18  [メール表示する]
    加藤と申します。

    このスレッドを参考にTBitmapDataにアクセスしたのですが,
    Windowsでは横32ドットで区切られて余白があるようで
    横幅が32で割り切れない画像だとずれてしまいました。
    しかし,OSXではこの現象は起きずつながっていました。

    ですので以下の関数を作ってこの問題に対応してみました。

    function BitmapDataOffset(Width:integer):integer;
    begin
    {$IFDEF MSWINDOWS}
    Result := (((Width-1) shr 5)+1) shl 5;
    {$ENDIF MSWINDOWS}
    {$IFDEF MACOS}
    Result := Width;
    {$ENDIF MACOS}
    end;

    yOffset := BitmapDataOffset(FBmp.Width);

    FBmp.Map(TMapAccess.maWrite, BmpData);
    for Y := 0 to FBmp.Height - 1 do
    begin

    YAddr := Y * yOffset;

    for X := 0 to FBmp.Width - 1 do
    begin
    PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    end;
    end;
    FBmp.Unmap(BmpData);


    いかがでしょうか。ご指導いただけるとありがたいです。
    よろしくお願いいたします。

    2012年9月25日 14:13 hosokawa <delphi-users@…>:
    > 太田さん
    >
    > 細川です。
    >
    > pixels は TBitmapData.GetPixle, SetPixel として実装されていますね。
    >
    > ちなみに、僕が書いたコードが悪いのですが、下の行掛けるものは Width です……。
    > すみません。
    >
    > YAddr := Y * FBmp.Height; // Y * FBmp.Width
    >
    > たしかに、今のところ、変更箇所はコードを見ないといけないので不便ですね。
    >
    >
    >
    > On Tue, 25 Sep 2012 14:07:53 +0900 (JST)
    > "Gracix [takefumi-o]" <delphi-users@…> wrote:
    >
    >> 細川さん、さっそくありがとうございます。
    >>
    >> できました!
    >> TBitmapDataにマップしてから書き戻す形になるんですね。
    >>
    >>
    >> 以下がテストしたコードです。
    >>
    >> 配列はPAlphaColorArrayを使って書いてみました。
    >>
    >>
    >> FBmp.Map(TMapAccess.maWrite, BmpData);
    >> for Y := 0 to FBmp.Height - 1 do
    >> begin
    >> YAddr := Y * FBmp.Height;
    >> for X := 0 to FBmp.Width - 1 do
    >> begin
    >> PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    >> end;
    >> end;
    >> FBmp.Unmap(BmpData);
    >>
    >>
    >> 調べたらCanvas.Pixelsもなくなっているようですね。
    >>
    >> 変えるのはいいですが、どこかに書いておいてほしいものです。(; ;
    >>
    >>
    >> 太田剛文
    >>
    >>
    >> MLホームページ: http://www.freeml.com/delphi-users
    >>
    >> ----------------------------------------------------------------------
    >> Wポイントでますますおトク!賢くネットショッピングしよう!
    >> http://ad.freeml.com/cgi-bin/sa.cgi?id=iTdVB
    >> ------------------------------------------------------[freeml byGMO]--
    >
    >
    > Regards,
    > HOSOKAWA Jun
    > [S/G] SERIALGAMES Inc.
    > TEL: 03-5812-0980
    > FAX: 03-5812-0970
    > twitter: http://twitter.com/serialgames
    > twitter: http://twitter.com/flaver_sg
    > mailto: jun@…
    > fla:ver http://flaver.jp/
    > WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria
    >
    >
    > MLホームページ: http://www.freeml.com/delphi-users
    >
    > ----------------------------------------------------------------------
    > 大宇宙へいざ出撃!【ブラウザ銀河大戦】
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=iTeam
    > ------------------------------------------------------[freeml byGMO]--
    >

  • MLNo.2834   hosokawaさん  (0) 2012/10/29 12:13  [メール表示する]
    加藤さん

    細川です。

    Win32 API では、ビットマップは 32bit メモリ境界にあわせる必要があります。
    そのため、32bit で割り切れない画像ではご指摘の通り、ずれてしまいます。

    FireMonkey での Canvas は TCanvasD2D, TCanvasGdiPlus など、いくつかの実装で構
    成されています。
    たとえば、TCanvasGdiPlus の場合、使っているデータ構造は Windows.GDIPAPI.BitmapData
    です。
    ここには「1ラインに必要なバイト数」を表す「Stride」というパラメータがあります。
    また、TCanvasD2D で使ってる構造は D3D10_MAPPED_TEXTURE2D で、そこにも
    「RowPictch」という同じ意味のパラメータがあります。

    それらは全て FMX.Types.TBitmapData.Pitch に入っています。

    ですので、

    > YAddr := Y * yOffset;

    は、

    Stride := BmpData.Pitch div SizeOf(TAlphaColor);

    YAddr := Y * Stride;

    と書けると思います。
    お試し下さい。




    On Sat, 27 Oct 2012 18:18:12 +0900 (JST)
    Yuzuru <delphi-users@…> wrote:

    > 加藤と申します。
    >
    > このスレッドを参考にTBitmapDataにアクセスしたのですが,
    > Windowsでは横32ドットで区切られて余白があるようで
    > 横幅が32で割り切れない画像だとずれてしまいました。
    > しかし,OSXではこの現象は起きずつながっていました。
    >
    > ですので以下の関数を作ってこの問題に対応してみました。
    >
    > function BitmapDataOffset(Width:integer):integer;
    > begin
    > {$IFDEF MSWINDOWS}
    > Result := (((Width-1) shr 5)+1) shl 5;
    > {$ENDIF MSWINDOWS}
    > {$IFDEF MACOS}
    > Result := Width;
    > {$ENDIF MACOS}
    > end;
    >
    > yOffset := BitmapDataOffset(FBmp.Width);
    >
    > FBmp.Map(TMapAccess.maWrite, BmpData);
    > for Y := 0 to FBmp.Height - 1 do
    > begin
    >
    > YAddr := Y * yOffset;
    >
    > for X := 0 to FBmp.Width - 1 do
    > begin
    > PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    > end;
    > end;
    > FBmp.Unmap(BmpData);
    >
    >
    > いかがでしょうか。ご指導いただけるとありがたいです。
    > よろしくお願いいたします。
    >
    > 2012年9月25日 14:13 hosokawa <delphi-users@…>:
    > > 太田さん
    > >
    > > 細川です。
    > >
    > > pixels は TBitmapData.GetPixle, SetPixel として実装されていますね。
    > >
    > > ちなみに、僕が書いたコードが悪いのですが、下の行掛けるものは Width です……。
    > > すみません。
    > >
    > > YAddr := Y * FBmp.Height; // Y * FBmp.Width
    > >
    > > たしかに、今のところ、変更箇所はコードを見ないといけないので不便ですね。
    > >
    > >
    > >
    > > On Tue, 25 Sep 2012 14:07:53 +0900 (JST)
    > > "Gracix [takefumi-o]" <delphi-users@…> wrote:
    > >
    > >> 細川さん、さっそくありがとうございます。
    > >>
    > >> できました!
    > >> TBitmapDataにマップしてから書き戻す形になるんですね。
    > >>
    > >>
    > >> 以下がテストしたコードです。
    > >>
    > >> 配列はPAlphaColorArrayを使って書いてみました。
    > >>
    > >>
    > >> FBmp.Map(TMapAccess.maWrite, BmpData);
    > >> for Y := 0 to FBmp.Height - 1 do
    > >> begin
    > >> YAddr := Y * FBmp.Height;
    > >> for X := 0 to FBmp.Width - 1 do
    > >> begin
    > >> PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    > >> end;
    > >> end;
    > >> FBmp.Unmap(BmpData);
    > >>
    > >>
    > >> 調べたらCanvas.Pixelsもなくなっているようですね。
    > >>
    > >> 変えるのはいいですが、どこかに書いておいてほしいものです。(; ;
    > >>
    > >>
    > >> 太田剛文
    > >>
    > >>
    > >> MLホームページ: http://www.freeml.com/delphi-users
    > >>
    > >> ----------------------------------------------------------------------
    > >> Wポイントでますますおトク!賢くネットショッピングしよう!
    > >> http://ad.freeml.com/cgi-bin/sa.cgi?id=iTdVB
    > >> ------------------------------------------------------[freeml byGMO]--
    > >
    > >
    > > Regards,
    > > HOSOKAWA Jun
    > > [S/G] SERIALGAMES Inc.
    > > TEL: 03-5812-0980
    > > FAX: 03-5812-0970
    > > twitter: http://twitter.com/serialgames
    > > twitter: http://twitter.com/flaver_sg
    > > mailto: jun@…
    > > fla:ver http://flaver.jp/
    > > WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria
    > >
    > >
    > > MLホームページ: http://www.freeml.com/delphi-users
    > >
    > > ----------------------------------------------------------------------
    > > 大宇宙へいざ出撃!【ブラウザ銀河大戦】
    > > http://ad.freeml.com/cgi-bin/sa.cgi?id=iTeam
    > > ------------------------------------------------------[freeml byGMO]--
    > >
    >
    >
    > MLホームページ: http://www.freeml.com/delphi-users
    >
    > ----------------------------------------------------------------------
    > メールだけでみんなを招待できる便利機能♪
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=jcncJ
    > ------------------------------------------------------[freeml byGMO]--


    Regards,
    HOSOKAWA Jun
    [S/G] SERIALGAMES Inc.
    TEL: 03-5812-0980
    FAX: 03-5812-0970
    twitter: http://twitter.com/serialgames
    twitter: http://twitter.com/flaver_sg
    mailto: jun@…
    fla:ver http://flaver.jp/
    WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria

  • MLNo.2840   Yuzuruさん  (0) 2012/10/30 17:21  [メール表示する]
    細川様

    加藤です。ありがとうございます。
    やはり良い手が用意されていたんですね。
    見つけることができませんでした。

    お礼が遅くなってしまい申し訳ないです。
    OSXでも動作を確認できました。
    せっかくなのでコードを整理してみました。

    uses
    System.UIType, FMX.Types;

    var
    X, Y:integer;
    FBmp:TBitmap;
    BmpData:TBitmapData;
    yOffset, yAddr:integer;

    begin
    FBmp.Map(TMapAccess.maWrite, BmpData);
    yOffset := BmpData.Pitch div SizeOf(TAlphaColor);
    for Y := 0 to FBmp.Height - 1 do begin
    YAddr := Y * yOffset;
    for X := 0 to FBmp.Width - 1 do begin
    PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    end;
    end;
    FBmp.Unmap(BmpData);
    end;


    2012年10月29日 12:13 hosokawa <delphi-users@…>:
    > 加藤さん
    >
    > 細川です。
    >
    > Win32 API では、ビットマップは 32bit メモリ境界にあわせる必要があります。
    > そのため、32bit で割り切れない画像ではご指摘の通り、ずれてしまいます。
    >
    > FireMonkey での Canvas は TCanvasD2D, TCanvasGdiPlus など、いくつかの実装で構
    > 成されています。
    > たとえば、TCanvasGdiPlus の場合、使っているデータ構造は Windows.GDIPAPI.BitmapData
    > です。
    > ここには「1ラインに必要なバイト数」を表す「Stride」というパラメータがあります。
    > また、TCanvasD2D で使ってる構造は D3D10_MAPPED_TEXTURE2D で、そこにも
    > 「RowPictch」という同じ意味のパラメータがあります。
    >
    > それらは全て FMX.Types.TBitmapData.Pitch に入っています。
    >
    > ですので、
    >
    >> YAddr := Y * yOffset;
    >
    > は、
    >
    > Stride := BmpData.Pitch div SizeOf(TAlphaColor);
    >
    > YAddr := Y * Stride;
    >
    > と書けると思います。
    > お試し下さい。
    >
    >
    >
    >
    > On Sat, 27 Oct 2012 18:18:12 +0900 (JST)
    > Yuzuru <delphi-users@…> wrote:
    >
    >> 加藤と申します。
    >>
    >> このスレッドを参考にTBitmapDataにアクセスしたのですが,
    >> Windowsでは横32ドットで区切られて余白があるようで
    >> 横幅が32で割り切れない画像だとずれてしまいました。
    >> しかし,OSXではこの現象は起きずつながっていました。
    >>
    >> ですので以下の関数を作ってこの問題に対応してみました。
    >>
    >> function BitmapDataOffset(Width:integer):integer;
    >> begin
    >> {$IFDEF MSWINDOWS}
    >> Result := (((Width-1) shr 5)+1) shl 5;
    >> {$ENDIF MSWINDOWS}
    >> {$IFDEF MACOS}
    >> Result := Width;
    >> {$ENDIF MACOS}
    >> end;
    >>
    >> yOffset := BitmapDataOffset(FBmp.Width);
    >>
    >> FBmp.Map(TMapAccess.maWrite, BmpData);
    >> for Y := 0 to FBmp.Height - 1 do
    >> begin
    >>
    >> YAddr := Y * yOffset;
    >>
    >> for X := 0 to FBmp.Width - 1 do
    >> begin
    >> PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    >> end;
    >> end;
    >> FBmp.Unmap(BmpData);
    >>
    >>
    >> いかがでしょうか。ご指導いただけるとありがたいです。
    >> よろしくお願いいたします。
    >>
    >> 2012年9月25日 14:13 hosokawa <delphi-users@…>:
    >> > 太田さん
    >> >
    >> > 細川です。
    >> >
    >> > pixels は TBitmapData.GetPixle, SetPixel として実装されていますね。
    >> >
    >> > ちなみに、僕が書いたコードが悪いのですが、下の行掛けるものは Width です……。
    >> > すみません。
    >> >
    >> > YAddr := Y * FBmp.Height; // Y * FBmp.Width
    >> >
    >> > たしかに、今のところ、変更箇所はコードを見ないといけないので不便ですね。
    >> >
    >> >
    >> >
    >> > On Tue, 25 Sep 2012 14:07:53 +0900 (JST)
    >> > "Gracix [takefumi-o]" <delphi-users@…> wrote:
    >> >
    >> >> 細川さん、さっそくありがとうございます。
    >> >>
    >> >> できました!
    >> >> TBitmapDataにマップしてから書き戻す形になるんですね。
    >> >>
    >> >>
    >> >> 以下がテストしたコードです。
    >> >>
    >> >> 配列はPAlphaColorArrayを使って書いてみました。
    >> >>
    >> >>
    >> >> FBmp.Map(TMapAccess.maWrite, BmpData);
    >> >> for Y := 0 to FBmp.Height - 1 do
    >> >> begin
    >> >> YAddr := Y * FBmp.Height;
    >> >> for X := 0 to FBmp.Width - 1 do
    >> >> begin
    >> >> PAlphaColorArray(BmpData.Data)^[YAddr + X] := $80FF0000;
    >> >> end;
    >> >> end;
    >> >> FBmp.Unmap(BmpData);
    >> >>
    >> >>
    >> >> 調べたらCanvas.Pixelsもなくなっているようですね。
    >> >>
    >> >> 変えるのはいいですが、どこかに書いておいてほしいものです。(; ;
    >> >>
    >> >>
    >> >> 太田剛文
    >> >>
    >> >>
    >> >> MLホームページ: http://www.freeml.com/delphi-users
    >> >>
    >> >> ----------------------------------------------------------------------
    >> >> Wポイントでますますおトク!賢くネットショッピングしよう!
    >> >> http://ad.freeml.com/cgi-bin/sa.cgi?id=iTdVB
    >> >> ------------------------------------------------------[freeml byGMO]--
    >> >
    >> >
    >> > Regards,
    >> > HOSOKAWA Jun
    >> > [S/G] SERIALGAMES Inc.
    >> > TEL: 03-5812-0980
    >> > FAX: 03-5812-0970
    >> > twitter: http://twitter.com/serialgames
    >> > twitter: http://twitter.com/flaver_sg
    >> > mailto: jun@…
    >> > fla:ver http://flaver.jp/
    >> > WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria
    >> >
    >> >
    >> > MLホームページ: http://www.freeml.com/delphi-users
    >> >
    >> > ----------------------------------------------------------------------
    >> > 大宇宙へいざ出撃!【ブラウザ銀河大戦】
    >> > http://ad.freeml.com/cgi-bin/sa.cgi?id=iTeam
    >> > ------------------------------------------------------[freeml byGMO]--
    >> >
    >>
    >>
    >> MLホームページ: http://www.freeml.com/delphi-users
    >>
    >> ----------------------------------------------------------------------
    >> メールだけでみんなを招待できる便利機能♪
    >> http://ad.freeml.com/cgi-bin/sa.cgi?id=jcncJ
    >> ------------------------------------------------------[freeml byGMO]--
    >
    >
    > Regards,
    > HOSOKAWA Jun
    > [S/G] SERIALGAMES Inc.
    > TEL: 03-5812-0980
    > FAX: 03-5812-0970
    > twitter: http://twitter.com/serialgames
    > twitter: http://twitter.com/flaver_sg
    > mailto: jun@…
    > fla:ver http://flaver.jp/
    > WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria
    >
    >
    > MLホームページ: http://www.freeml.com/delphi-users
    >
    > ----------------------------------------------------------------------
    > いつでもどこでもメールチェック!freemlのスマートフォンアプリ
    > http://ad.freeml.com/cgi-bin/sa.cgi?id=jcCFi
    > ------------------------------------------------------[freeml byGMO]--
    >


メールへの返信はMLのメンバーしかできません。

更新順メールリスト