小编Las*_*ive的帖子

了解HTML Retina画布支持

最近,我开始研究HTML canvas绘图以及它的视网膜支持。如果没有在- canvas元素上绘制进一步的配置线,则在视网膜显示器上看起来会有些模糊。

我确实知道,视网膜显示器的像素数是原来的四倍,因此默认情况下必须填充某些设备像素(否则图片的大小仅为预期的一半)。

示例:使用和
绘制HTML 。canvaswidth: 50pxheight: 50px

<canvas height="50px" width="50px">

正常屏幕上的浏览器只绘制它(50 * 50像素)。视网膜显示屏上的浏览器接收50x50px的画布,但由于是视网膜,因此50 * 50的设备像素会比预期的要小。因此,浏览器在视网膜上将其绘制为100 * 100像素。

现在,画布上的清晰线条(黑色/白色单个像素线)变得有点模糊,因为浏览器必须填充附近的像素并使用附近的周围环境-有些像素变成灰色。

解决方法:
这段代码应该解决问题:

// Returns: 1 on 'normal' screens, 2 on retina displays
var PIXEL_RATIO = (function () {
    var ctx = document.createElement("canvas").getContext("2d"),
        dpr = window.devicePixelRatio || 1,
        bsr = ctx.webkitBackingStorePixelRatio ||
              ctx.mozBackingStorePixelRatio ||
              ctx.msBackingStorePixelRatio ||
              ctx.oBackingStorePixelRatio ||
              ctx.backingStorePixelRatio || 1;

    return dpr / bsr;
})();


function makeCanvasHiPPI(canvas) {
  canvas.style.width  = canvas.width  + "px"; …
Run Code Online (Sandbox Code Playgroud)

html javascript canvas

5
推荐指数
1
解决办法
2046
查看次数

具有灵活数组成员的结构数组如何表现?

正如标题所述,我想知道具有灵活数组成员的C结构数组如何表现.这是一个例子:

struct vector {
    size_t length;
    double array[];
};
Run Code Online (Sandbox Code Playgroud)

维基百科的文章说:

sizeof这种结构上的操作符需要给出柔性阵列成员的偏移量.

在我的机器上,这对应于8个字节(sizeof(size_t)).但是,当我执行以下操作时会发生什么:

显然,数组不能保存向量数据v0,因为它只有3*8字节= 24字节宽.我该如何处理这样的情况?

#define LENGTH 10

int main() {
    struct vector arr[3];

    struct vector *v0 = calloc(1, sizeof(*v0) + LENGTH * sizeof(v0->array[0]));
    v0->length = LENGTH;

    size_t i;
    for (i = 0; i < v0->length; i++) {
        v0->array[i] = (double) i;
    }

    struct vector v1;
    struct vector v2;

    arr[0] = *v0;
    arr[1] =  v1;
    arr[2] =  v2;

    for (i = 0; …
Run Code Online (Sandbox Code Playgroud)

c arrays struct flexible-array-member

5
推荐指数
1
解决办法
1158
查看次数

Malloc 不返回 NULL

我刚刚测试malloc了一个巨大的内存请求,但它没有返回NULL。我已经听说过这个,但是 BSD(我在 mac 上)手册页说:

返回值
如果成功,calloc()malloc()realloc()reallocf()valloc()函数返回一个指向已分配内存的指针。如果有错误,它们返回一个NULL指针并将 errno 设置为ENOMEM

如何正确且可靠地检查返回的指针是否指向请求大小的有效块?

编辑:我刚看到这篇文章。我猜 BSD 也一样?

编辑2:代码:

typedef struct {
    uint8_t red;
    uint8_t green;
    uint8_t blue;
} RGB_TYPE;

int main() {
    RGB_TYPE *field = malloc(50000 * 50000 * sizeof(RGB_TYPE));

    if (!field)
        return -1;

    ... write to field (SEG_FAULT) ... 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c memory malloc out-of-memory

3
推荐指数
1
解决办法
774
查看次数

HTML/CSS - 过渡选择器

我有这样的设置:

<div id="wrapper">
  <div id="inner_01"></div>
  <div id="inner_02"></div>
  <div id="inner_03"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想构建一个具有以下属性的转换:

  1. 当鼠标悬停在inner_01background-colorinner_02inner_03应该改变.
  2. 当鼠标悬停在inner_02background-colorinner_01inner_03应该改变.
  3. 当鼠标悬停在inner_03background-colorinner_01inner_02应该改变.

这是我目前的做法:

html css css-selectors css3 css-transitions

3
推荐指数
1
解决办法
443
查看次数

HTML/CSS - 左对齐并居中于同一行

我想在HTML和CSS的同一行中左对齐一些文本并将另一个文本居中.我还想要一个margin-left左对齐文本.

这是我目前的做法:

HTML:

<div id="wrapper">
  <h1 class="align-left">LEFT</h1>
  <h1>CENTER</h1>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.align-left {
  float: left;
  margin-left: 20px;
}

#wrapper {
  text-align: center;
}
Run Code Online (Sandbox Code Playgroud)

这适用于左对齐和右对齐,但边距也会推动居中文本.我认为这是因为float: left在页面流中保留左对齐文本.

非常感谢你:)

html css html5 text-align css3

1
推荐指数
1
解决办法
5363
查看次数

边界半径百分比

在 CSS 中,允许写这样的东西。

#div-with-border {
  width: 100%;   // scales with parent wrapper
  height: 30%;   // scales with parent wrapper

  border: 1px solid black;
  border-radius: 10%;
}
Run Code Online (Sandbox Code Playgroud)

如果#div-width-border不是完美的正方形,则边框不会是圆形,因为这意味着 10% 的宽度和 10% 的高度用于边框半径(不同)。我想得到完美的圆圈......我不能使用px,因为边界半径取决于高度/宽度。

我确信#div-width-border元素的宽度总是大于高度。我需要一个大小的边界半径100% of element height来获得一个完美的圆,但100%不会这样做,因为它将使用元素宽度作为半径计算的一部分。

html css percentage

-1
推荐指数
1
解决办法
2106
查看次数