質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1595閲覧

透過png⇒透過しないpngの変換方法(透過部分への着色方法)

popmusic

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/11/08 12:09

お世話になります。

前提・実現したいこと

画像データはbyte配列でメモリ上に保持しており
これを透過しないpngに変更する処理を実装しています。
(可能であれば着色したいと思っています)

条件は、メモリ上で処理することです。
一度ファイルに出力することなしに処理を完了させたいのです。

ファイル出力して変換する処理は見つかるのですが
メモリ上で完結する方法が分からず困っています。

よろしくお願いいたします

補足情報(FW/ツールのバージョンなど)

.net Framework 4.5.2
VisualStudio2013

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikadzuchi

2021/11/08 16:55

byte配列でメモリ上に保持している画像データというのは、透過pngからどのようにして生成したものですか? 行いたい処理は、pngファイルの出力でよろしいですか?
popmusic

2021/11/08 22:20

コメントありがとうございます。 画像はファイルを読み込んでいるようです(FileStreamとかだと思います) 行いたいのはメモリ上で変換して 外部システムにbyte配列のまま渡したいです。 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2021/11/09 01:25

ファイルで出来るなら、MemoryStreamに置き換えるだけですね。
guest

回答1

0

ベストアンサー

どこまで出来て、どこからわからないのかが不明ですが、必要と思われる部品を書いておきます。

C#

1using System.Drawing; 2using System.Drawing.Imaging; 3using System.IO; 4 5static class UTL 6{ 7 // byte 配列を Image に変換 8 public static Image BytesToImage(byte[] bytes) 9 { 10 using (var m = new MemoryStream(bytes)) 11 { 12 return Bitmap.FromStream(m); 13 } 14 } 15 16 // 透過 Imaage に着色した Bitmap を返す 17 public static Bitmap CreateColoredBitmap(Image image, Color color) 18 { 19 var bmp = new Bitmap(image.Width, image.Height); 20 using (var g = Graphics.FromImage(bmp)) 21 { 22 using (var brush = new SolidBrush(color)) 23 { 24 g.FillRectangle(brush, new Rectangle(Point.Empty, image.Size)); 25 g.DrawImage(image, Point.Empty); 26 } 27 } 28 return bmp; 29 } 30 31 // Bitmap を byte 配列に変換 32 public static byte[] BitmapToBytes(Bitmap bmp) 33 { 34 using (var m = new MemoryStream()) 35 { 36 bmp.Save(m, ImageFormat.Png); 37 return m.ToArray(); 38 } 39 } 40}

投稿2021/11/09 01:05

KOZ6.0

総合スコア2644

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/11/09 02:30 編集

BitmapToBytesのサイズ無指定のMemoryStreamは再アロケーションが頻繁に発生しそうなので、ArrayPool等で事前確保した方が良いかもしれません。
KOZ6.0

2021/11/09 03:00

Framework 4.5.2 なので、改善するとしたら ThreadStaticAttribute な MemoryStream を使いまわすくらいかと。
popmusic

2021/11/09 03:10

コメントありがとうございます。 後で試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問