垂直方向180度反転かつ画像を180度回転させる


Delphi初心者  2008-01-10 23:22:47  No: 29274

(A,B,Cは画像)
A君から見た場合  B君から見た場合
      ↓                  ↓    
    A  B                  C        
      C                  B  A
という状態にしたいのですが.つまりテーブル越しに向かい合ってる環境を作りたいんです.
しかし,画像まで反転してしまうと相手から見た場合,文字まで反転してしまうので読みづらくなってしまうんで,位置だけを反転して画像自身は相手に見やすいように180度回転させたいのですが,どうしたらいいでしょうか?


KHE00221  2008-01-11 01:38:21  No: 29275

ここでも見てみて

http://junki.lix.jp/delphigr.html

http://madia.world.coocan.jp/delphi/Effect/index.htm


delphi初心者2  2008-01-15 07:17:44  No: 29276

(A,B,Cは画像)
A君から見た場合  B君から見た場合
      ↓                  ↓    
    A  B                  C        
      C                  B  A
という状態にしたいのですが.つまりテーブル越しに向かい合ってる環境を作りたいんです.
しかし,画像まで反転してしまうと相手から見た場合,文字まで反転してしまうので読みづらくなってしまうんで,位置だけを反転して画像自身は相手に見やすいように180度回転させたいのですが,どうしたらいいでしょうか?
しかも動画をリアルタイムに以上のようにしたいのですがなにからしていいのかがわからなくてよろしければ教えてください


Ru  2008-01-17 00:44:01  No: 29277

いまいちよく分からないのですが
下記HPのソース参考になりますか?
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00097.html

画像の180度回転は  iAngle  を指定してください。
位置の反転は画面サイズと対象の画像座標の計算で導き出せる?
的はずれの可能性大・・・


もにゃ  2008-01-17 01:13:07  No: 29278

こんな感じですかね?
180°,90°回転は三角関数を使うまでもありません。
これはコントロールを回転させてますが画像の回転は画像処理で行ってください。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, Contnrs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    procedure N1Click(Sender: TObject);
  public
    { Public 宣言 }
    Buttons: array [0..2] of TButton;
    List:TList;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  MainMenu1: TMainMenu;
  N1: TMenuItem;
  i:Integer;
begin
  MainMenu1:=TMainMenu.Create(Self);
  N1:=TMenuItem.Create(MainMenu1);
  N1.Caption:='反転';
  N1.OnClick:=N1Click;
  List:=TList.Create;

  for i:=0 to Length(Buttons)-1 do
  begin
    Buttons[i]:=TButton.Create(self);
    Buttons[i].Parent:=self;
    Buttons[i].Width:=100;
    Buttons[i].Height:=30;
    Buttons[i].Caption:='Button ' + inttostr(i);
    //反転させるオブジェクトを登録
    List.Add(Buttons[i]);
  end;
  Buttons[0].Left:= (ClientWidth - Buttons[0].Width) div 2;
  Buttons[0].Top := 0;
  Buttons[1].Left:= 0;
  Buttons[1].Top := Buttons[0].Height+20;
  Buttons[2].Left:= ClientWidth - Buttons[2].Width;
  Buttons[2].Top := Buttons[0].Height+20;

  MainMenu1.Items.Add(N1);

end;

procedure TForm1.N1Click(Sender: TObject);
var i:Integer;
begin
//反転ルーチン
for i:=0 to List.Count-1 do
begin
  TControl(List.Items[i]).Left:= ClientWidth
                                 - TControl(List.Items[i]).Left
                                 - TControl(List.Items[i]).Width;
  TControl(List.Items[i]).Top := ClientHeight
                                 - TControl(List.Items[i]).Top
                                 - TControl(List.Items[i]).Height;
end;
end;

end.


KHE000221  2008-01-17 01:46:12  No: 29279

画像の 上下反転・左右反転・180度回転は CopyRect でもできるんだよ?

//180度回転
procedure TForm1.Button1Click(Sender: TObject);
begin
    with Image1.Picture.Bitmap do
    begin
     Image1.Picture.Bitmap.Canvas.CopyRect(Rect(0,0,Width,Height),Image1.Picture.Bitmap.Canvas,Rect(Width-1,Height-1,-1,-1));
    end;
end;

//上下反転
procedure TForm1.Button2Click(Sender: TObject);
begin
    with Image1.Picture.Bitmap do
    begin
      Image1.Picture.Bitmap.Canvas.CopyRect(Rect(0,0,Width,Height),Image1.Picture.Bitmap.Canvas,Rect(0,Height-1,Width,-1));
    end;
end;

//左右反転
procedure TForm1.Button3Click(Sender: TObject);
begin
    with Image1.Picture.Bitmap do
    begin
      Image1.Picture.Bitmap.Canvas.CopyRect(Rect(0,0,Width,Height),Image1.Picture.Bitmap.Canvas,Rect(Width-1,0,-1,Height));
    end;
end;


Delphi初心者  2008-01-21 17:17:48  No: 29280

もにゃさん>プログラムを載せていただいてありがたいのですが,いまいち理解できないのでよろしければ解説していただけないでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加