2017-10-05 90 views
-2

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

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

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

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

  • 如果我复制像素从在Photoshop模式的图像RGB/8其保存为b /瓦。

  • 如果模式为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); 
} 
+0

我没有downvote,但我认为你必须**显示一些可测试代码**,以允许其他人重新创建和/或修复你的问题...... PS:记住RGB 8位是真的的24位颜色(因为8位红色+8绿色+8蓝色)。如果这样可以帮助你。 –

+1

感谢您的回答。我的第一篇文章,学习规则... – alexeef

+0

您的帖子下有一个小[**'edit' **](https://stackoverflow.com/posts/46576473/edit)按钮。或者只是使用链接(添加'/编辑'到页面url):https://stackoverflow.com/posts/46576473/edit –

回答

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对象,你甚至可以在你的应用程序中查看“选定区域”图像。