【问题标题】:c# Clipboard.GetImage() from Photoshop region returns a b/w imagec# Clipboard.GetImage() 从 Photoshop 区域返回一个黑白图像
【发布时间】:2017-10-05 01:22:56
【问题描述】:

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

我也尝试过GetDataObject 方法,但结果相同。图像格式似乎是 memoryBMP 但为 RGB/8 格式,所以我无法获得全彩色图像。

如何将 Photoshop 剪贴板格式的彩色图像检索回我的 C# 应用程序?

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

  • 如果我在 Photoshop 模式 RGB/8 中从图像复制像素,它会保存为黑白。

  • 如果模式是index(256 色),它会节省颜色。

data中的图片格式为:

[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);
}

【问题讨论】:

  • 我没有投反对票,但我认为您必须显示一些可测试的代码以允许其他人重新创建和/或解决您的问题... PS:记住 RGB 8- bit 实际上是总共 24 位颜色(因为红色 8 位 + 绿色 8 位 + 蓝色 8 位)。如果这对您有所帮助。
  • 感谢您的回答。我的第一篇文章,学习规则...
  • 您的帖子下方有一个小edit 按钮。或者只使用链接(将/edit 添加到页面网址):stackoverflow.com/posts/46576473/edit
  • 测试我的答案,如果它适合你,那么mark as solved 也可以帮助其他需要这个正确答案的人。让我知道进展如何...
  • 实际上问题似乎是实际数据来自 BGRA 而不是 ARGB,我忘了提到我在 Unity3D 中这样做

标签: c# image photoshop


【解决方案1】:

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

试试这样:

//# 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)。

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

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

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 2020-06-20
    • 2011-02-26
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2015-09-06
    相关资源
    最近更新 更多