Android画素変換の研究(一)
基本概念1.px(pixels):ピクセル
は、図面の基本要素です.スクリーン解像度とは、ピクセルのことです.携帯電話の解像度が480*800であれば、携帯電話の幅は480ピクセル、長さは800ピクセルです.この画素は固定されている.0,0から240400までのピクセル単位で直線を描くと、左上から画面の真ん中までの直線になります.
2.dpi(Dots Per Inch):画素密度
の双曲線コサインを返します.1インチあたりに印刷されるポイント数または線数.
DPIはもともと印刷上の記録単位であり、インチごとに印刷できるドット数(Dot Per Inch)を意味する.しかし、デジタル入力、出力装置の急速な発展に伴い、多くの人がデジタル映像の解像度をDPIで表しているが、印刷時に計算されるネットワークポイント(Dot)とコンピュータディスプレイの表示画素(Pixel)が同じではないことに注意している可能性があるため、専門家はPPI(Pixel Per Inch)でデジタル映像の解像度を表し、両者を区別する.
簡単に理解できるように、固定サイズごとに、何画素あるか.例えば同じ画素で、小さいサイズほど表示されると、画素密度が高くなる.密度の高い効果は、画面の繊細さです.同じ斜線で、密度の高い設備に表示すると、鋸歯が現れにくい.密度の低いデバイスに表示すると、鋸歯が発生しやすくなります.
次の2つの図を見てみましょう.
pix-001
pix-002
同じ画像サイズで、第1副図の画素密度が大きい(50*50画素)、第2副図の画素密度が小さい(5*5画素)、まったく違うように見えますか.
Androidが仮想マシンを作成するときに、desityというパラメータがあります.これとdpiは概念であるべきだ.
3.dip(device independent pixels):デバイス独立画素.
抽象的な意味での画素を指し、プログラムはインタフェース要素を定義します.実際の密度に関係のない単位として、プログラマがレイアウトスキーム(インタフェース要素の幅、高さ、位置)を構築するのを支援します.
dipはandroidが抽象化した概念である.彼の主な目的は何ですか.Googleはなぜdipでスクリーンを配置することをお勧めしますか?
実験は同じdipが効果を示す
dipで表されるボタンで効果を見てみましょう.
比較しやすいように、ボタンの下に自分でカスタマイズしたViewを置きます.
Layoutのxmlファイル:
自分でカスタマイズしたViewのコード:
コードの機能は、4本の直線を描き、絶対画素で識別して比較することです.次に、直線上に240*320 dpiのボタンを配置します.dpiと画素の関係を見てみましょう.異なる仮想マシンを起動することで、表示効果を比較します.
比較1:まず、画面の長さと幅の割合が同じで、解像度が異なる場合を比較します.
仮想マシン1:
pix-003
表示される効果は次のとおりです.
pix-004
仮想マシン2:
pix-005
表示される効果は次のとおりです.
pix-006
2つのディスプレイのボタンが、同じ割合で画面に表示されていることがわかります.4本のカラーの直線は絶対画素で描かれ、ボタンはdipで描かれています.density=120の場合、240 dip=180 pxである.density=160の場合、240 dip=240 pxとなります.
基本的に、私たちは結論を出すことができます.
同じdipでは,異なる解像度のスクリーンでは,スクリーンの相対幅が同じである.相対幅とは、コントロールが画面に占める割合であると理解できる.
density=160の場合、1 dip=1 px
このような式を得ることができます.
desity :160 = px : dip
しかし、公式は演算に使うだけです.本当の意味は、dipピクセルでスクリーンのコントロールを並べたら、スクリーンサイズの変換にかかわらず、コントロールの相対的なサイズは変わらないということです.これがGoogleが考えている「デバイスとは関係ない」という意味です.
は、図面の基本要素です.スクリーン解像度とは、ピクセルのことです.携帯電話の解像度が480*800であれば、携帯電話の幅は480ピクセル、長さは800ピクセルです.この画素は固定されている.0,0から240400までのピクセル単位で直線を描くと、左上から画面の真ん中までの直線になります.
2.dpi(Dots Per Inch):画素密度
の双曲線コサインを返します.1インチあたりに印刷されるポイント数または線数.
DPIはもともと印刷上の記録単位であり、インチごとに印刷できるドット数(Dot Per Inch)を意味する.しかし、デジタル入力、出力装置の急速な発展に伴い、多くの人がデジタル映像の解像度をDPIで表しているが、印刷時に計算されるネットワークポイント(Dot)とコンピュータディスプレイの表示画素(Pixel)が同じではないことに注意している可能性があるため、専門家はPPI(Pixel Per Inch)でデジタル映像の解像度を表し、両者を区別する.
簡単に理解できるように、固定サイズごとに、何画素あるか.例えば同じ画素で、小さいサイズほど表示されると、画素密度が高くなる.密度の高い効果は、画面の繊細さです.同じ斜線で、密度の高い設備に表示すると、鋸歯が現れにくい.密度の低いデバイスに表示すると、鋸歯が発生しやすくなります.
次の2つの図を見てみましょう.
pix-001
pix-002
同じ画像サイズで、第1副図の画素密度が大きい(50*50画素)、第2副図の画素密度が小さい(5*5画素)、まったく違うように見えますか.
Androidが仮想マシンを作成するときに、desityというパラメータがあります.これとdpiは概念であるべきだ.
3.dip(device independent pixels):デバイス独立画素.
抽象的な意味での画素を指し、プログラムはインタフェース要素を定義します.実際の密度に関係のない単位として、プログラマがレイアウトスキーム(インタフェース要素の幅、高さ、位置)を構築するのを支援します.
dipはandroidが抽象化した概念である.彼の主な目的は何ですか.Googleはなぜdipでスクリーンを配置することをお勧めしますか?
実験は同じdipが効果を示す
dipで表されるボタンで効果を見てみましょう.
比較しやすいように、ボタンの下に自分でカスタマイズしたViewを置きます.
Layoutのxmlファイル:
- view plain
- xml version="1.0" encoding="utf-8"?>
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <com.study.about.dip.ViewForShow
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <Button
- android:id="@+id/btn"
- android:layout_width="240dip"
- android:layout_height="320dip"
- android:text="Button"
- />
- FrameLayout>
自分でカスタマイズしたViewのコード:
- view plain
- package com.study.about.dip;
-
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.util.AttributeSet;
- import android.util.Log;
- import android.util.TypedValue;
- import android.view.View;
-
- public class ViewForShow extends View {
- private Paint mPaint = new Paint();
-
- public ViewForShow(Context context) {
- super(context);
- }
-
- public ViewForShow(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public ViewForShow(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- public void draw(Canvas canvas) {
- mPaint.setColor(Color.RED);
- canvas.drawLine(0, 0, 120, 160, mPaint);
- mPaint.setColor(Color.GREEN);
- canvas.drawLine(0, 320, 120, 160, mPaint);
- mPaint.setColor(Color.YELLOW);
- canvas.drawLine(240, 0, 120, 160, mPaint);
- mPaint.setColor(Color.BLUE);
- canvas.drawLine(240, 320, 120, 160, mPaint);
- }
- }
コードの機能は、4本の直線を描き、絶対画素で識別して比較することです.次に、直線上に240*320 dpiのボタンを配置します.dpiと画素の関係を見てみましょう.異なる仮想マシンを起動することで、表示効果を比較します.
比較1:まず、画面の長さと幅の割合が同じで、解像度が異なる場合を比較します.
仮想マシン1:
pix-003
表示される効果は次のとおりです.
pix-004
仮想マシン2:
pix-005
表示される効果は次のとおりです.
pix-006
2つのディスプレイのボタンが、同じ割合で画面に表示されていることがわかります.4本のカラーの直線は絶対画素で描かれ、ボタンはdipで描かれています.density=120の場合、240 dip=180 pxである.density=160の場合、240 dip=240 pxとなります.
基本的に、私たちは結論を出すことができます.
同じdipでは,異なる解像度のスクリーンでは,スクリーンの相対幅が同じである.相対幅とは、コントロールが画面に占める割合であると理解できる.
density=160の場合、1 dip=1 px
このような式を得ることができます.
desity :160 = px : dip
しかし、公式は演算に使うだけです.本当の意味は、dipピクセルでスクリーンのコントロールを並べたら、スクリーンサイズの変換にかかわらず、コントロールの相対的なサイズは変わらないということです.これがGoogleが考えている「デバイスとは関係ない」という意味です.