- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很想知道我在这里做错了什么。我是 CGImageRefs 的新手,所以任何建议都会有帮助。
我正在尝试创建一个位图图像,该图像的像素值是另一个位图像素的加权和,并且两个位图每个 channel 都是 16 位。出于某种原因,我可以毫无困难地让它在 8 位图像上工作,但在 16 位图像上却严重失败。我的猜测是我只是没有正确设置。我尝试过使用 CGFloats、float 和 UInt16s 作为数据类型,但没有任何效果。输入图像没有 Alpha channel 。我得到的输出图像看起来像彩色的雪。
标题中的相关内容:
UInt16 *inBaseAddress;
UInt16 *outBaseAddress;
CGFloat inAlpha[5];
CGFloat inRed[5];
CGFloat inGreen[5];
CGFloat inBlue[5];
CGFloat alphaSum, redSum, greenSum, blueSum;
int shifts[5];
CGFloat weight[5];
CGFloat weightSum;
我使用以下方法创建输入位图的上下文(使用 CGImageSourceCreateImageAtIndex(source, 0, NULL) 创建的 CGImageRef):
size_t width = CGImageGetWidth(inBitmap);
size_t height = CGImageGetHeight(inBitmap);
size_t bitmapBitsPerComponent = CGImageGetBitsPerComponent(inBitmap);
size_t bitmapBytesPerRow = (pixelsWide * 4 * bitmapBitsPerComponent / 8);
CGColorSpaceRef colorSpace = CGImageGetColorSpace(inImage);
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNoneSkipLast;
CGContextRef inContext = CGBitmapContextCreate (NULL,width,height,bitmapBitsPerComponent,bitmapBytesPerRow,colorSpace,bitmapInfo);
输出位图的上下文以相同的方式创建。我使用以下方法将 inBitmap 绘制到 inContext 中:
CGRect rect = {{0,0},{width,height}};
CGContextDrawImage(inContext, rect, inBitmap);
然后我像这样初始化 inBaseAddress 和 outBaseAddress:
inBaseAddress = CGBitmapContextGetData(inContext);
outBaseAddress = CGBitmapContextGetData(outContext);
然后我用 inBaseAddress 中的值填充 outBaseAddress:
for (n = 0; n < 5; n++)
{
inRed[n] = inBaseAddress[inSpot + 0 + shifts[n]];
inGreen[n] = inBaseAddress[inSpot + 1 + shifts[n]];
inBlue[n] = inBaseAddress[inSpot + 2 + shifts[n]];
inAlpha[n] = inBaseAddress[inSpot + 3 + shifts[n]];
}
alphaSum = 0.0;
redSum = 0.0;
greenSum = 0.0;
blueSum = 0.0;
for (n = 0; n < 5; n++)
{
redSum += inRed[n] * weight[n];
greenSum += inGreen[n] * weight[n];
blueSum += inBlue[n] * weight[n];
alphaSum += inAlpha[n] * weight[n];
}
outBaseAddress[outSpot + 0] = (UInt16)roundf(redSum);
outBaseAddress[outSpot + 1] = (UInt16)roundf(greenSum);
outBaseAddress[outSpot + 2] = (UInt16)roundf(blueSum);
outBaseAddress[outSpot + 3] = (UInt16)roundf(alphaSum);
作为一个简单的检查,我尝试过:
outBaseAddress[outSpot + 0] = inBaseAddress[inSpot + 0];
outBaseAddress[outSpot + 1] = inBaseAddress[inSpot + 1];
outBaseAddress[outSpot + 2] = inBaseAddress[inSpot + 2];
outBaseAddress[outSpot + 3] = inBaseAddress[inSpot + 3];
它有效,并且至少意味着指向位图数据的上下文和指针正在工作。
感谢您的任何意见。这非常令人沮丧,因为它在 8 位图像上运行得很好。
最佳答案
好的,我已经弄清楚了。我需要将 16 位 图像的 bitmapInfo 设置为 kCGBitmapByteOrder16Little
,将 8bit 图像的 bitmapInfo 设置为 kCGBitmapByteOrder32Little
。我对此感到有点惊讶,因为我本来以为会是相反的情况(16 位为 32Little,8 位为 16Little)。
我还需要将指向位图的指针键入为 UInt8*
和 UInt16*
。看来我还必须在 bitmapContext
中包含一个 Alpha channel 。我不知道为什么,但如果没有它,返回的上下文总是为零。
关于cocoa - 请帮助 CGBitmapContext 和 16 位图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3974484/
我在创建 CGBitmapContext 时遇到问题。 CGContextRef bitmapContext = CGBitmapContextCreate(nil, imageSize.width,
我有一个 CGBitmap 上下文,其中保存了在屏幕上绘制的所有内容。当我按下一个名为 reset 的按钮时,我希望 UIView 中绘制的所有内容都被删除。如果将 cacheBitmap 和缓存上下
我正在尝试用纯红色填充 CGBitmapContext 并获取 CGImgRef,但图像是全透明的。这是代码 CGColorSpaceRef colorSpace = CGColorSpaceCrea
我对 Objective-C 比较陌生,可以将 png 图像转换为 CGBitmapContext。如果是,我该如何实现。 最佳答案 虽然无法从 UIImage 获取像素值,但可以通过 UIImage
我创建了一个 256 x 256 的 CGBitmapContext,并且我有一个 CGImageRef,我想将其绘制到此上下文中。我的目标是裁剪图像(并最终创建图像图 block ),但如果我使用
如何替换 CGBitmapContext 中已绘制的特定颜色(RGB 值)? 有什么简单的方法吗? 提前致谢。 最佳答案 您需要通过执行以下操作来获得指向像素和有关其格式的信息的指针: // This
我有一个 RGB 格式的原始图像缓冲区。我需要将它绘制到 CGContext,以便获得 ARGB 格式的新缓冲区。我通过以下方式实现这一点: 使用CGDataProviderCreateWithDat
我正在尝试使用 Core Graphics 开发绘图应用程序。我想让背景处于 alpha 状态,但它是黑色的。我尝试使用所有不同类型的位图信息类型但没有成功。 kCGImageAlphaPremult
我们在使用 CGBitmapContext 中的函数 ShowTextAtPoint 显示德语元音变音文本时遇到问题。变音字符不显示。 我们尝试从 XCode 转换代码: CGContextSelec
我正在尝试弄清楚如何使用 CMYK 色彩空间创建位图上下文并在其中绘制图像。 我正在使用 Apple 问答 here 中的代码,并对其进行修改以创建 CMYK 色彩空间并在其中绘制。在我的日志中,我收
我正在执行以下命令,这是我从几个不同的教程中得出的(只是一个渲染 channel ,未显示初始化代码,但对于无纹理基元来说效果很好): glMatrixMode(GL_PROJECTION); glL
我很想知道我在这里做错了什么。我是 CGImageRefs 的新手,所以任何建议都会有帮助。 我正在尝试创建一个位图图像,该图像的像素值是另一个位图像素的加权和,并且两个位图每个 channel 都是
我有两张图片。第一个 (avatar) 是 640x640,第二个 (like) 是 21x20。当我试图先画第二张时,我明白了,但质量很差。这是代码: var bounds = targeImage
我正在使用下面的代码来呈现 PDF 页面的预览。然而,它正在使用大量内存(每页 2-3MB)。 在我看到的设备日志中: : CGBitmapContextInfoCreate: unable to a
所以我在这个过程中有一个基本的绘图应用程序,可以让我画线。我绘制到屏幕外位图,然后在 drawRect 中显示图像。它可以工作,但速度太慢,在您用手指绘制后约半秒更新一次。我从本教程中获取代码并对其进
如果在 UIKit 中,包括 drawRect,是否会自动处理 Retina 显示的高清方面?那么这是否意味着在 drawRect 中,1024 x 768 View 的当前图形上下文实际上是一个 2
我试图将特定的颜色矩形绘制到 CGBitmapContext 中,然后将像素值与我绘制的颜色进行比较(一种 HitTest )。 在 Leopard 上这工作正常,但在 SnowLeopard 上我得
我正在 Mac OS X(不是 iOS)上使用矢量图形绘图,并且在 Mac OS X 上处理矢量图形基元时,我遇到了像素之间的经典绘图导致线条模糊等。我直接将 Core Graphics/Quartz
我是一名优秀的程序员,十分优秀!