66822


[swift - レイヤーなら小数点を指定できる？ -
スタック・オーバーフロー](https://ja.stackoverflow.com/questions/66759/%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%81%aa%e3%82%89%e5%b0%8f%e6%95%b0%e7%82%b9%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%a7%e3%81%8d%e3%82%8b)

で、1ピクセルの線を描く基本的な原理を理解しました。  
ちなみに1ピクセルの線は [Retina Display 環境で幅1pxの線を描画する -
Qiita](https://qiita.com/usagimaru/items/9703195b1f28066aac16) も参考にしつつ

[code]

    1 / UIScreen.main.scale
    
[/code]

で描画させました。

上記回答のコメントで

> 説明が長くなるので省きましたがiPhone
> X等の@3xのデバイスは完全に３倍のピクセルにマッピングされるわけではありません（ディスプレイはそこまで高密度ではなく、物理的なピクセルが足りないので）

とコメントを頂きました。上記質問では基本的な原理がわかったので、スタックオーバーフロー的には質疑を完結すべきと考え回答済みとしました。

たしかに`@3x`が出た当時、かなりピクセルとの関係（というか端末との関係？）が複雑でややこしかったため、理解しきれずにいた記憶があります。（おそらく当時理解していれば、上記の質問をすることはなかったでしょう...）

いまさら感が強いですが `@3x` で
1ポイントがどのようになるのかわかる資料とその簡単な解説が知りたいです。（1ポイントで説明するのが説明しづらい場合は1ポイントでなくても結構です）


CC BY-SA 4.0
2020-05-20T12:42:08.413
66820
2020-05-20T14:02:19.793
2020-05-20T12:59:08.327
9008
9008
question
swift ios xcode objective-c
@3xのRetina displayで1ptの値はどう表示されますか？


> iPhone X等の@3xのデバイスは完全に３倍のピクセルにマッピングされるわけではありません

ごめんなさい。「iPhone X等の@3xのデバイスは」と書きましたが「iPhone 8 Plus等」の間違いです。iPhone
X系のデバイスはポイントに対してちょうど３倍の解像度のディスプレイが搭載されているので1/Scale幅の線はピッタリ１ピクセルで描画されます。

で、iPhone 8
Plus等のダウンサンプリングがされるデバイスですが、それはダウンサンプリングの結果によるので正確にこう、ということは（少なくとも私には）できません。

ただ仕組みを説明することはできます。

説明のために「論理ピクセル」という概念を導入します。  
Retinaでない@1xのディスプレイ（もう存在しませんが）、@2xのRetina Display、iPhone X系の@3xのRetina
Displayは、１ポイントがそれぞれ１ピクセル、２ピクセル、３ピクセルの論理ピクセルにマッピングされ、論理ピクセルはそのまま物理的なピクセルに対応できるのでその通り描画されます。

iPhone 6/7/8 Plus系のデバイスが搭載しているディスプレイはピッタリ３倍の解像度ではありません。

しかしソフトウェア上は@3xが要求されているので１ポイントはいったん３倍の論理ピクセルにマッピングされます。

その後、物理的なディスプレイは３倍のピクセルを持っていないので、自動的にダウンサンプリングされて実際のディスプレイに描画されます。

（参考）  
<https://www.paintcodeapp.com/news/iphone-6-screens-demystified>

<https://oleb.net/blog/2014/11/iphone-6-plus-screen/>  
^ 実際に１ピクセルのヘアラインを描画したディスプレイを比較した実験を公開されています。


CC BY-SA 4.0
2020-05-20T14:02:19.793
66822
2020-05-20T14:02:19.793
5519
66820
answer