Closed RyutoThurusaki closed 1 year ago
真っ黒の線は描画できないようにして黒=透過値として扱うのが楽な気がする
//validate rich black
Color validate = System.Windows.Media.Color.FromArgb(255, 0, 0, 0);
Color swapblack = System.Windows.Media.Color.FromArgb(255, 1, 1, 1);
if (color_pen == validate)
{
color_pen = swapblack;
}
if (color_outline == validate)
{
color_outline = swapblack;
}
って真っ黒をちょい黒に置き換えた上でやってみたけどできなかった。各値10くらいの差が無いとCanvas2Bitmap.MakeTransparentで別の色として認識されない…? Color swapblack = System.Windows.Media.Color.FromArgb(255, 15, 15, 15); くらいにしたらうまくいったけれど255, 11, 8, 3, 14みたいな中途半端な色と比較、swapblackに置き換えするのが難しい
あと背景色が黒だと合成の結果、フチが汚くなるので一緒に直したいね。 しきい値を強くするか透過に使う色を白にする…?
https://learn.microsoft.com/ja-jp/windows/win32/direct2d/how-to-clip-with-bitmap-masks あとこれは使えそうな希ガス
ふと思ったけど、透過色はFromArgb(255, 0, 0, 15)とかにすれば比較簡単だったじゃん。 なおこれでちゃんと動くかは未確認。 メモメモ
アルファをカラーにぶちこめば透過用の別Bitmapは作れるか あるいは一旦透過情報付きのPNGにペン情報を保存して合成するとか?
RenderTargetBitmapで直に合成しちゃうのもアリ…?
そもそもInkcanvasはパス情報なんだからMainImageにDrawingVisualで合成しちゃえばいいじゃんっていうことでかいけつ。
0,0,0の黒色のペン/アウトラインが画像を保存するときに消滅する
System.Drawing.Color color = System.Drawing.Color.FromArgb(0,0,0,0); をもとにCanvas2Bitmap.MakeTransparentしてるため黒色に反応して消してしまう。
Alphaだけを使うか、黒色の最大値をずらすかして対応したいかな
System.Drawing.Color.FromArgb(0)はうまくいかなかった。