10 X6,88cmの画像を要求する要件があります。cmからピクセルに単純に変換することはできないことを知っています。1つのピクセルサイズはユーザーのディスプレイ解像度に依存するためです。画像のサイズをcm単位で変更する方法があるかどうか知りたいのですが。(画像拡張子も保持する必要があります。例:PDFやその他の拡張子に変換できません)
5 に答える
これは、ユーザーが画像を印刷する解像度によって異なります(cm単位のサイズは、印刷時以外はほとんど意味がありません)。ユーザーがたとえば200dpiで印刷する場合、画像は(10 / 2.54 * 200)x(6.88 / 2.54 * 200)ピクセルである必要があります(cmとインチの間で変換するには2.54で除算する必要があります) )。どの解像度が必要かは、画像の種類とユーザーの品質要件に大きく依存します。
したがって、「X x Y cmにサイズ変更したい」と言っても、実際には意味がありません。
画像の必要なサイズを把握した後、実際のサイズを変更する方法のコードサンプルについては、このSOの回答でニーズをカバーできます。
実際には、画面上の画像サイズと印刷出力上の画像サイズを区別する必要があります。
通常、次の式があります。
inches = pixels / dpi
したがって、次のようになります。
pixel = inches * dpi
これは実際には印刷用です。
表示については、dpiをppiに置き換えれば、そこにあります。
インチに精通していない人(私のような)の場合:
inches = pixels / dpi
pixel = inches * dpi
1 centimeter = 0.393700787 inch
pixel = cm * 0.393700787 * dpi
このルーチンは、画像がモニターにX-cm表示されるようにピクセルサイズを計算します。
ただし、プリンターでは、DPIをPPI(bmp.HorizontalResolution&bmp.VerticalResolution)ほど簡単に取得できないため、それほど簡単ではありません。
public static int Cm2Pixel(double WidthInCm)
{
double HeightInCm = WidthInCm;
return Cm2Pixel(WidthInCm, HeightInCm).Width;
} // End Function Cm2Pixel
public static System.Drawing.Size Cm2Pixel(double WidthInCm, double HeightInCm)
{
float sngWidth = (float)WidthInCm; //cm
float sngHeight = (float)HeightInCm; //cm
using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1, 1))
{
sngWidth *= 0.393700787f * bmp.HorizontalResolution; // x-Axis pixel
sngHeight *= 0.393700787f * bmp.VerticalResolution; // y-Axis pixel
}
return new System.Drawing.Size((int)sngWidth, (int)sngHeight);
} // End Function Cm2Pixel
使用法は次のようになります。
public System.Drawing.Image Generate(string Text, int CodeSize)
{
int minSize = Cm2Pixel(2.5); // 100;
if (CodeSize < minSize)
CodeSize = minSize;
if (string.IsNullOrEmpty(Text))
{
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(CodeSize, CodeSize);
using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(bmp))
{
gfx.Clear(System.Drawing.Color.Black);
using(System.Drawing.Font fnt = new System.Drawing.Font("Verdana", 12, System.Drawing.FontStyle.Bold))
{
double y = CodeSize / 2.0 - fnt.Size;
gfx.DrawString("No Data", fnt, System.Drawing.Brushes.White, 5, (int)y, System.Drawing.StringFormat.GenericTypographic);
} // End Using fnt
} // End using gfx
return bmp;
} // End if (string.IsNullOrEmpty(Text))
...[Generate QR-Code]
return [Generated QR-Code]
}
JPGやTIFFなどの画像ファイル形式には、水平および垂直DPIなどの情報を含むEXIFヘッダーがあります。
したがって、このメタデータを含む画像を取得した場合は、印刷可能なサイズを確認できます。
double DPC = Image_DPI * 0.393700787;
double widthInCm = Image_Width * DPC;
double heightInCm = Image_Height * DPC;
if (widthInCm <= 10 && heightInCm <= 6.88) // do stuff
これらの印刷可能な寸法を超えないように画像のサイズを変更する必要がある場合は、逆の方法で、WxHの寸法の画像が10cmx6.88cmの境界内に収まるようにDPI比を計算できます。
Fredrikが言っていることの種類:私は素晴らしいDPIを取り、画像をその解像度以上にする必要があります(ただし、アスペクト比は同じです)。画像をエクスポート/印刷するときは、他のプログラムで使用されるDPIに画像のサイズを変更します。 / printer .. ..
これと同じくらい簡単かもしれません。ほとんどの画像には、1インチあたりのピクセル数が格納されています。画像の各次元のピクセル数を計算し、それをインチ数(cmから変換)で割ります。次に、元のビットを使用し、フィールドを1インチあたりのピクセル数(または、より一般的には1インチあたりのドット数)に変更します。
したがって、画像は3.93"x2.71"である必要があります。画像が393pxx271pxの場合、dpiを100x100に設定します。画像が39pxx27pxの場合、dpiを10x10に設定します。
他の回答で説明されているように、おそらくサイズ変更を行う必要があります。:)