来自Photoshop区域的c#Clipboard.GetImage()返回黑白图像

时间:2017-10-05 01:22:56

标签: c# image photoshop

如果我从Photoshop中以RGB 8位复制区域,Clipboard.GetImage()有黑白图像,但如果我将其更改为索引模式(256)GetImage则会返回彩色图像。

我也尝试使用GetDataObject方法,但结果相同。看起来图像格式是memoryBMP但是RGB / 8格式,所以我无法获得全彩色图像。

如何从Photoshop剪贴板格式中将彩色图像检索回我的C#app?

这是我正在使用的代码。图像已保存,但.. ..

  • 如果我以Photoshop模式RGB/8复制图像中的像素,则将其保存为黑白。

  • 如果模式为index(256色),则可以保存颜色。

数据中的图像格式为:

[ImageFormat: b96b3caa-0728-11d3-9d7b-0000f81ef32e] MemoryBMP

以下是我的C#代码......

IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Dib))
{
    Bitmap image = (System.Drawing.Image)data.GetData(DataFormats.Dib, false) as Bitmap;

    var encoder = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == ImageFormat.Jpeg.Guid);
    var encParams = new EncoderParameters(1);
    encParams.Param[0] = new EncoderParameter(Encoder.ColorDepth, 24L);
    image.Save("encode.jpg", encoder, encParams);
}

1 个答案:

答案 0 :(得分:0)

如果您只想在 Photoshop (或任何图片程序,如画图等)中选择一个矩形区域,请将其粘贴到您的应用中(通过剪贴板)...

试试这样:

//# Get copied data (image) from clipboard
IDataObject data = Clipboard.GetDataObject();

if (data.GetDataPresent(DataFormats.Dib))
{
    //# Make into C# bitmap
    Bitmap image = (data.GetData(DataFormats.Bitmap,true) as Bitmap);

    //# Show in some PictureBox
    //pbx.Image = image;

    //# Save to disk
    image.Save("c:/test//encode_test1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
  • 编译并运行您的应用程序(其窗口应该是打开的)。
  • 在Photoshop中打开图像并选择/复制区域。

  • 在您的应用中,获取图像(我使用按键来运行上述代码的function)。

  • C:\文件夹中的test驱动器中找到JPG文件。

  • 如果您创建了PictureBox对象,则甚至可以在应用中查看“所选区域”图片。