アプリ版:「スタンプのみでお礼する」機能のリリースについて

640x480の画像のRGB値を格納した1次元のbyte型の配列があります。配列のサイズは640x480x3=921600です。ここから画像として表示させたいのですがどのようにすればよいでしょうか。



試したこと:
自分で調べたところbyte配列からbitmapに変換するやり方があったので以下のコードを試したのですがうまくいきませんでした。

MemoryStream ms = new MemoryStream(data);
Bitmap bmp = new Bitmap(ms);

※dataは上記のbyte配列です
Bitmapのインスタンスを作るところでArgumentExceptionエラーが出てしまいます。

A 回答 (3件)

既に回答ありますけども…。


921600バイト分の配列だけではビットマップ画像として構築するには情報が足りません。
サイズは?
ピクセルフォーマットは?
コードにしようとしている貴方は知っているかも知れませんが、データが渡されるメソッド側では何も判りません。

ビットマップファイルヘッダーなどのヘッダを追加して渡すか、サイズやピクセルフォーマットを指定して作成されたBitmapに対してピクセルデータとして渡すか…になるかと思います。
# 前者だとBitmap(Stream)で、後者だとBitmap(Int32, Int32, PixelFormat)で。
    • good
    • 0
この回答へのお礼

おっしゃる通りサイズやカラー数などの情報がありませんね...
おかげさまで解決できました!

お礼日時:2020/01/07 19:00

dataのbyte列の並びが、Bitmapのコンストラクタに与えることのできるデータフォーマットに適合していないと言っています。


適合した形式に変換して与える必要があると思います。


Bitmap(Stream) - Microsoft Docs .NET documentation
https://docs.microsoft.com/ja-jp/dotnet/api/syst …
> 例外
> ArgumentException
> stream にイメージ データが含まれていないか null です。
> または stream に、65,535 ピクセルよりも大きい 1 次元の PNG イメージ ファイルが含まれています。


参考:
ビットマップの種類
https://docs.microsoft.com/ja-jp/dotnet/framewor …
> グラフィックスファイル形式
> ディスクファイルにビットマップを保存するための標準形式は多数あります。
> GDI + は、次の段落で説明されているグラフィックスファイル形式をサポートしています。
> 以下略
    • good
    • 0
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A