bmpIn
関数で受け取る前に問題が発生する可能性があります。8bpp画像を挿入した後、次の(より良い)コードをテストできます(f:\sara1.bmp
変換前に8bpp画像がシフトされていないことを確認するため)。
private static Bitmap ConvertTo24(Bitmap bmpIn)
{
//Bitmap bmpIn;
bmpIn = new Bitmap(@"f:\sara1.bmp");
Bitmap converted = new Bitmap(bmpIn.Width, bmpIn.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
using (Graphics g = Graphics.FromImage(converted))
{
g.PageUnit = GraphicsUnit.Pixel;
Rectangle rng = new Rectangle(new Point(0, 0), bmpIn.Size);
g.DrawImage(bmpIn, rng); // use this instead of following
}
converted.Save(@"F:\sara2.bmp");
}
それがうまくいくことを願っています4u。コメントですでに言われているように、DrawImage(Image img、Rectangle rng)を使用しました
答えは完了です。以下は説明です。あなたのコード(編集。そのまま使用してコメントに従ってください)
private static Bitmap ConvertTo24(Bitmap bmpIn)
{
bmpIn.Save(@"F:\sara1.bmp");
return;
// After you have called this function. Go open your image f:\sara1.bmp from
//hrad disk-- I doubt you would find it shifted here even before conversion
Bitmap converted = new Bitmap(bmpIn.Width, bmpIn.Height, PixelFormat.Format24bppRgb);
using (Graphics g = Graphics.FromImage(converted))
{
// Prevent DPI conversion
g.PageUnit = GraphicsUnit.Pixel;
// Draw the image
g.DrawImageUnscaled(bmpIn, 0, 0);
// g.DrawImage(bmpIn, 0, 0);
}
converted.Save(@"F:\sara2.bmp");
}
もう一度あなたのコード(私はあなたが受け取った8bppビットマップを無視してfドライブから直接フェッチしました。アプリケーションを実行する前、または少なくともこの関数を呼び出す前にそれを置くと仮定します)
次のコードも私にとってはうまくいきました。
private static Bitmap ConvertTo24(Bitmap bmpIn)
{
Bitmap bmpIn = new Bitmap(@"f:\sara1.bmp");
Bitmap converted = new Bitmap(bmpIn.Width, bmpIn.Height, PixelFormat.Format24bppRgb);
using (Graphics g = Graphics.FromImage(converted))
{
// Prevent DPI conversion
g.PageUnit = GraphicsUnit.Pixel;
// Draw the image
g.DrawImageUnscaled(bmpIn, 0, 0);
// g.DrawImage(bmpIn, 0, 0);
}
converted.Save(@"F:\sara2.bmp");
}