gpt4 book ai didi

c++ - 数组,复制像素到正确的索引,算法

转载 作者:行者123 更新时间:2023-11-30 19:49:33 25 4
gpt4 key购买 nike

我的图像大小为 2x2,因此像素数 = 4

一个像素 - 4 字节

所以我有一个 16 字节的数组 - mas[16] - width * height * 4 = 16

我想制作相同的图像,但大小是 2 倍,这意味着四个像素而不是 1

新数组的大小为 64 字节 - newMas[16] - width*2 * height*2 * 4

问题,我无法正确地将像素复制到 newMas,不同尺寸的图像正确复制像素 enter image description here

此代码将像素复制到 mas[16]

    size_t width = CGImageGetWidth(imgRef);
size_t height = CGImageGetHeight(imgRef);
const size_t bytesPerRow = width * 4;
const size_t bitmapByteCount = bytesPerRow * height;
size_t mas[bitmapByteCount];
UInt8* data = (UInt8*)CGBitmapContextGetData(bmContext);

for (size_t i = 0; i < bitmapByteCount; i +=4)
{
UInt8 a = data[i];
UInt8 r = data[i + 1];
UInt8 g = data[i + 2];
UInt8 b = data[i + 3];

mas[i] = a;
mas[i+1] = r;
mas[i+2] = g;
mas[i+3] = b;

}

最佳答案

一般来说,使用内置图像绘制 API 比编写自己的图像操作代码更快且更不易出错。上面的代码中至少存在三个潜在错误:

  • 它假设行尾没有填充(iOS 似乎填充了 16 字节的倍数);您需要使用CGImageGetBytesPerRow()。
  • 它采用固定的像素格式。
  • 它从 CGImage 获取宽度/高度,但从 CGBitmapContext 获取数据。

假设你有一个 UIImage,

CGRect r = {{0,0},img.size};
r.size.width *= 2;
r.size.height *= 2;
UIGraphicsBeginImageContext(r.size);
// This turns off interpolation in order to do pixel-doubling.
CGContextSetInterpolationQuality(UIGraphicsGetCurrentContext(), kCGInterpolationNone);
[img drawRect:r];
UIImage * bigImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

关于c++ - 数组,复制像素到正确的索引,算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com