画像を合成するには?

解決


東海岸  2005-11-10 07:31:06  No: 18569

512*384サイズのJpegファイルを4個読み、1024*768サイズに
合成(2×2)してファイル保存するプログラムを作成しています。
"LoadFromFile"でJpegファイルを読み込んだ後、どうやって合
成したらいいでしょうか?


Mr.XRAY  URL  2005-11-10 09:05:17  No: 18570

合成するということは,つまり2×2で表示するということですよね.
表示する方法がわかならなということでしょうか.
Jpeg画像一つなら表示はできているのでしょうか.
それはどのようにしているのでしょうか.


junki  2005-11-10 09:06:41  No: 18571

1024*768サイズのTBitmapを用意して、その Canvas.Draw() で4カ所に
それぞれ描画して一つの画像にします。


東海岸  2005-11-11 02:54:24  No: 18572

早速の”レス”をありがとうございます。
Mr.XRAYさんへ。
下記のように"TImage"の配列を使い"ボタン3"をクリックすると一つずつ画像を
表示します。(下記ステップ)
"TOpenPictureDialog"が画像のプレビュー付きで便利そうだったので使ってみましたが”jpeg”が使えないんです。あとで変換すれば、と思っていましたが行き詰まり、はじめから"Jpeg"でできないかな?と。

junkiさんへ
"TBitMap"の名前から"Jpeg"は使えないと思ってました。
Helpファイルを調べたら使えそうなのが見つかりました。今、試行錯誤
しているところです。

取っ掛かりができたので、なんとかできそうです。ありがとうございました。

-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
type
  TForm1 = class(TForm)
    Button3: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    procedure Button3Click(Sender: TObject);
    procedure FormOpen(Sender: TObject);
- - - - - - - - - - - - - - 
var
  Form1: TForm1;
  Images: Array[0..3] of TImage ; //TImageの配列
  ImagesCount: Integer;
  CurrentFile: string;
implementation

{$R *.dfm}
//フォームオープン(初期値設定)
procedure TForm1.FormOpen(Sender: TObject);
begin
  ImagesCount := 0
end;
//ボタン3をクリック
procedure TForm1.Button3Click(Sender: TObject);
var
w_Top : integer;
w_Left: integer;
begin
 if OpenPictureDialog1.Execute then  //jpegが選択できない
    begin
      if ImagesCount > 2 then 
        begin
           ImagesCount := 0
      end;
      Images[ImagesCount]           := TImage.Create(Self);
      Images[ImagesCount].Parent := Form1;
      Images[ImagesCount].Width   := 100;   //Sizeはテスト用
      Images[ImagesCount].Height  := 100;
      w_Top  := 10;
      w_Left := ImagesCount;
      if ImagesCount > 1 then
        begin
          w_Top  := 120;
          w_Left := w_Left - 2;
      end;
      Images[ImagesCount].Top    := w_Top;
      Images[ImagesCount].Left   := w_Left * 100 +
                                    (w_Left + 1) * 10;
      CurrentFile := OpenPictureDialog1.FileName;
      Images[ImagesCount].Picture.LoadFromFile(CurrentFile);
      ImagesCount := ImagesCount + 1;
    end;
end;

end.


りおりお  2005-11-11 03:43:42  No: 18573

uses
  Jpeg;

にすると、TJpegImage のインスタンスはVCLのTGraphic互換になりますので
Bitmap.Canvas.Draw() で直接ビットマップ上に描くことができますよ。


Mr.XRAY  URL  2005-11-11 06:22:59  No: 18574

ちょっと意地が悪かったかもしれませんが,実はJpegの扱いの問題なの
ではないかと思ったので確認したかったのです.

答えは,りおりおさんのレスにありますね.


東海岸  2005-11-11 07:21:37  No: 18575

uses
  Jpeg;

こうゆう、おまじないみたいな便利な書き方ってHelpでは見つけられないものです。これで弾みがつきそうです。重ね々ありがとうございました。


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

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






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