我收到错误:
"无法从具有索引像素格式的图像创建图形对象."
在功能:
public static void AdjustImage(ImageAttributes imageAttributes, Image image)
{
Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
Graphics g = Graphics.FromImage(image);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(image, rect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAttributes);
g.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我想问你,我该如何解决?
我想知道如何创建具有透明背景和只有 2 种索引颜色(红色和蓝色)的图像以最小化文件大小?
更具体地说,我有两个要转换的黑白图像,一个转换为透明和蓝色,另一个转换为透明和红色。然后我想合并这两个图像。我可以用普通的 RGBA 图像来做到这一点,但我真的希望对颜色进行索引以最小化文件大小。
理想情况下使用 PIL,但其他 Python 库也可以工作。
我正在使用自定义批处理脚本来制作文件夹中所有 PNG 图像的调整大小副本(33% 和 66%)。这是我的代码:
for f in $(find /myFolder -name '*.png');
do
sudo cp -a $f "${f/%.png/-3x.png}";
sudo convert $f -resize 66.67% "${f/%.png/-2x.png}";
sudo convert $f -resize 33.33% $f;
done
Run Code Online (Sandbox Code Playgroud)
它工作得很好,除非原始图像被索引。在这种情况下,图像的较小版本是 RGB(因此文件大小甚至比原始图像更大)。
我尝试了几个版本但没有成功。我想应该解决这个问题的一个是:
for f in $(find /myFolder -name '*.png');
do
sudo cp -a $f "${f/%.png/-3x.png}";
sudo convert $f -define png:preserve-colormap -resize 66.67% "${f/%.png/-2x.png}";
sudo convert $f -define png:preserve-colormap -resize 33.33% $f;
done
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
编辑:
这是更新的 co,但它仍然无法按预期工作(请参阅附图 - 左侧是原始图像,右侧是调整大小的):
for f in $(find /myFolder -name '*.png');
do
sudo cp …Run Code Online (Sandbox Code Playgroud) 我有一个图像,我尝试使用Graphics.FromImage(图像)加载到图形对象,但是如果图像具有索引像素格式,则会引发异常.
有没有办法安全地转换索引图像?
更新:感谢Joe提示将旧图像绘制在新图像上,而不是我试图转换它.这很有道理.
我正在阅读RGB2IND函数的文档,发现它使用了Uniform Quantization、Minimum Variance Quantization和Inverse Colormap,尽管我不太清楚这些给定参数如何适合算法。
是否有任何解释性语言(MATLAB、JavaScript、Python)的代码示例可以准确演示此函数在此语法中的工作原理?
[X,map] = rgb2ind(RGB,n);
Run Code Online (Sandbox Code Playgroud) algorithm matlab image-processing color-mapping indexed-image
c# ×2
image ×2
.net ×1
algorithm ×1
graphics ×1
imagemagick ×1
matlab ×1
png ×1
python ×1
transparency ×1