Bitmapから円形に切り取り、別のBitmapに描画するには?


こうすけ  2016-02-20 06:30:40  No: 47986

環境
 OS: Win7 
 バージョン:delphi 10 seattle
 
 Aの bitmapから、円形の領域でコピー領域を指定し、Bのbitmapに
描画したいのですが、可能でしょうか?
 
どなたかご存知の方がいれば教えてください。
 
四角形の領域の場合はできたのですが・・・
--------------------------------------------------------------------
 B := fmx.graphics.TBitmap.Create;

 コピー対象領域 := TRectf.Create(x,y,width,height);
 コピー先領域    := TRectf.Create(0,0,100,100);
 B.Canvas.DrawBitmap(A, コピー対象領域, コピー先領域, 1.0,true);


通りすがり  2016-02-20 09:43:47  No: 47987

普通に正方形でコピったあとで円の外側を塗りつぶすんじゃだめなんでしょうか?


こうすけ  2016-02-20 11:44:24  No: 47988

>通りすがりさん
レスありがとうございます。
情報足らずですみません。
最終的にはBのbitmapにコピー描画したものを画像ファイルとして使用するのですが、円の外を塗りつぶすと、画像としては四角で表示されてしまうとおもいます。(最終的に表示する画面の背景と同じ色で塗りつぶせば円に見えますが、その背景色が限定はできないのです・・)
ですので、領域そのものを円形にしたいのです。


Mr.XRAY  2016-02-20 21:14:42  No: 47989

円形という単純な図形 (TCanvas のメソッド類で描画可能な図形) であれば,
他にも方法があるかも知れませんが,リージョンを使用した方がいいかも知れません.


Mr.XRAY  2016-02-20 21:18:41  No: 47990

>リージョンを使用した方がいいかも知れません.

ネット上にあるサンプルの多くは,リージョンを描画する背景を塗りつぶしています.
塗り潰すかわりに,背景の元となる画像 (ビットマップ画像) を描画します.


通りすがり  2016-02-20 21:20:29  No: 47991

> 領域そのものを円形にしたい
とりあえずWindows(Win32API)の"リージョン"でいろいろ勉強してみるといいと思います。


Mr.XRAY  2016-02-21 04:18:57  No: 47992

大変失礼しました.
今,質問の文章を読み直したら,

>B := fmx.graphics.TBitmap.Create;

FireMonkey (FMX) なんですね.
FireMonkey だとリージョンは使えないと思います.パスが使えると思いますので,
パスを調べてみてください.


Mr.XRAY  2016-02-21 04:35:53  No: 47993

>FireMonkey だとリージョンは使えないと思います.

試していませんが,プラットフォームが Windows であれば,使えるかも知れません.uses に FMX.Platform.Win, Winapi.Windows 等が必要ですが.


こうすけ  2016-02-22 06:01:16  No: 47994

>通りすがりさん
>Mr.XRAYさん
レスありがとうございます。
確認が遅くなりすいません。

今回の件、「Delphi・円形」等で探していたのですが
なかなかほしい答えがなく、ネットで探すにも、
他にどのキーワードで?という状態でしたので
助かります。
「リージョン」、「パス」で調べてみます。


通りすがり  2016-02-22 09:38:07  No: 47995

さすが山本さん仕事が早い
FireMonkeyアプリケーションで、Bitmapから円形に切り取り、別のBitmapに描画するには – 山本隆の開発日誌
http://www.gesource.jp/weblog/?p=7353


こうすけ  2016-02-23 03:05:42  No: 47996

>通りすがりさん
情報提供有難うございます。
山本さんのサイト確認しました。
サイトに記載の方法でフォーム上のbitmap領域では円形で表示されたのですが、
bitmapを画像に保存すると抜き出した領域以外が黒く表示されているので
山本さんのサイトに
フォーム上に表示された形のまま保存が出来るのか
又は
領域外の背景色を白にすることは可能か
という旨の質問をさせて頂いています。

※こちらの掲示板と山本さんのブログと2つに対して
質問しているような状況なのですが、マナー上NGでしょうか?


tor  2016-02-23 05:16:06  No: 47997

ウ番目の投稿あたりから危惧していたのですが(だったら言えよ)
結局ツのビットマップがどうこういうのは本質的ではなくて、
必要なのは「保存した画像ファイル」をよそで利用した時に
領域の外に描画されないようにしたい……ということですよね。

つまり求めているものは『透過』です。このキーワードを含めないとおそらく話が通じないかと。

で、それを実現するには「この部分は透過だよ」という情報を含んだファイル形式である必要があります。
一応ビットマップファイルにもアルファチャンネルの情報を含めることは可能ですが、実際これ有効なの?対応しているアプリケーションあるの?となると自信がないので、
現実的な選択してとしてはミホヌになるんじゃないでしょうか。
スススススススススススススススススススススススススススススススススススススススス
ニコ こうすけ
トコ イーアカッーイッイエィ水ゥ アウコオエコーキ  書込者ノト:ロ 」「  。 ン

ヲサさん
レス有難うございます。
確認が遅くなり申し訳ありません。

「透過」のキーワードで調べてみます。
スススススススススススススススススススススススススススススススススススススススス
ニコ こうすけ
トコ イーアカッーイッイカィ金ゥ イアコオイコエエ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 」「  。 ン
モコ 

山本さんのサイトに新しい情報が記載されており(気がつきませんでした・・・)
そちらで解決いたしました。
で保存すれば透過した画像でした。

レスをして頂いた皆さん有難うございました。


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

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






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