【发布时间】: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 中这样做