0

配列からビットマップを作成する際にいくつか問題があります。私はカメラを持っていて、これからushort形式のグレースケール値を取得します。しかし、この値からビットマップを作成するにはどうすればよいですか?それだけ:

System.Drawing.Bitmap checks = new System.Drawing.Bitmap(10,  10);
.
.
checks.Save(@"C:\test.bmp", ImageFormat.Bmp);

動作しません:(。画像を取得してウィンドウツールで開くことができますが、別のグラフィックライブラリでファイルを開くと、多くのエラーが発生します。ヘッダーなどを使用して正しいbmpファイルを作成する方法は誰でもできます。誰かがいくつかのコード例を持っていますか?これは最も役に立ちます。

ありがとう

4

2 に答える 2

2

Bitmap適切なサイズ(幅、高さ)でを作成し、を使用LockBitsして、書き込む必要のあるメモリへのハンドルを取得する必要があります。データが.NETでサポートされているPixelFormatにある場合は、それをLockBitsに渡して、データをコピーするだけです。そうでない場合は、手動でデータ変換を行う必要があります。

それはすべて、データサンプルを受け取る形式に要約されますが、上記の説明は、画像を生成するために必要な手順の概要を示しています。

更新:データは16ビットのグレースケールであるPixelFormatため、直接使用できるがありますPixelFormat.16bppGrayScale

于 2011-03-22T21:46:06.643 に答える
0
public class(path,wid,height,boolean)
{ 

System.Drawing.Image myThumbnail150;
            System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
            System.Drawing.Image imagesize = System.Drawing.Image.FromFile(pic.FilePath);
            using (Bitmap bitmapNew = new Bitmap(imagesize))
            {

            double maxWidth = Convert.ToDouble(ConfigurationSettings.AppSettings["ImageWidth"]);
            double maxHeight = Convert.ToDouble(ConfigurationSettings.AppSettings["ImageHeight"]);
            int w = imagesize.Width;
            int h = imagesize.Height;
            // Longest and shortest dimension 
            int longestDimension = (w > h) ? w : h;
            int shortestDimension = (w < h) ? w : h;
            // propotionality  
            float factor = ((float)longestDimension) / shortestDimension;
            // default width is greater than height    
            double newWidth = maxWidth;
            double newHeight = maxWidth / factor;
            // if height greater than width recalculate  
            if (w < h)
            {
                newWidth = maxHeight / factor;
                newHeight = maxHeight;
            }
            myThumbnail150 = bitmapNew.GetThumbnailImage((int)newWidth, (int)newHeight, myCallback, IntPtr.Zero);
            string name = pic.Name.Replace(Path.GetExtension(pic.Name), ".Bmp");

            //Create a new directory name ThumbnailImage
            //Save image in TumbnailImage folder
            myThumbnail150.Save(yourpath+ name, System.Drawing.Imaging.ImageFormat.Bmp);
            bitmapNew.Dispose();
}
于 2011-03-22T22:34:00.180 に答える