【问题标题】:setPixel triggering error: InvalidOperationException: 'SetPixel is not supported for images with indexed pixel formats.'setPixel 触发错误:InvalidOperationException:“具有索引像素格式的图像不支持 SetPixel。”
【发布时间】:2020-04-11 20:49:45
【问题描述】:

用于真正基本的隐写工具。

我正在尝试将每个像素的蓝色值更改为消息中每个字符的 ASCII 值。

Bitmap bmp = new Bitmap(routeBox.Text);
for (int i = 0; i<bmp.Width; i++)
{
    for (int j = 0; j<bmp.Height; j++)
    {
        Color pixelCol = bmp.GetPixel(i, j);
        if (i< 1 && j<textToEmbed.TextLength)
        {
            char letter = Convert.ToChar(textToEmbed.Text.Substring(j, 1));
            int value = Convert.ToInt32(letter);
            bmp.SetPixel(i, j, Color.FromArgb(pixelCol.R, pixelCol.G, value));
        }
    }
}

这适用于 jpeg,但蓝色值以从 56 左右开始的递减数字返回,所以我现在尝试使用 .bmp 来实现。

在这一行触发了错误:

bmp.SetPixel(i, j, Color.FromArgb(pixelCol.R, pixelCol.G, value));

保存后从像素中检索消息我正在做:

Bitmap bmp = new Bitmap(routeBox.Text);
string message = "";
for (int i = 0; i<bmp.Width; i++)
{
    for (int j = 0; j<bmp.Height; j++)
    {
        Color pixelCol = bmp.GetPixel(i, j);
        if (i< 1 && j< 25)
        {
            int value = pixelCol.B;
            char c = Convert.ToChar(value);
            string letter = System.Text.Encoding.ASCII.GetString(
                new byte[] { Convert.ToByte(c) });
            message = message + letter;
        }
    }
}

【问题讨论】:

  • routebox.Text 中有什么内容?是否包含文件名?文件名是什么?
  • routeBox.Text 是包含 3 张图像的文件夹的路径; jpeg、png、bmp。
  • 所以您将文件夹名称传递给Bitmap 构造函数?这听起来不对。
  • 不,抱歉,我使用的是 openFileDialog,我的意思是我在该文件夹中测试了 3 种图像类型..

标签: c# encoding bitmap pixel steganography


【解决方案1】:

您遇到的错误意味着当图像的 PixelFormat 为 Format8bppIndexed 时,您无法调用 Bitmap.SetPixel()。

一种解决方案是使用转换为 24 位而不是 8 位的图像副本。

这意味着代替这一行:

Bitmap bmp = new Bitmap(routeBoxText);

使用这两行代码:

Bitmap bmpOrig = new Bitmap(routeBoxText);
Bitmap bmp = bmpOrig.Clone(new Rectangle(0, 0, bmpOrig.Width, bmpOrig.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb);

有关像素格式和每像素位数的更多信息,see this page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 2016-10-13
    • 2011-07-07
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2020-11-06
    相关资源
    最近更新 更多