0

ここで私がやろうとしているのは、大きなサイズの .JPG 画像のリストをインポートすることです。品質をあまり落とさずに縮小してから、.JPG/.PNG として出力したいと思います。 .BMP のようにメモリを消費しすぎないようにします。

画像が .bmp の場合にのみ操作できることはわかっています。ここに私が持っているサンプルコードのいくつかがあります(私はそれらをインポートする方法しか知りません)

private void LoadImages() 
{
    for (int i = 0; i < trees.Length; i++) 
    {
        string d = imagePath + trees[i].latinName + ".JPG";
        treesImage[i] = Image.FromFile(d);
    }
    //the image path is a constant 
    //trees[i].latinName is a string property 
    //treesImage is an array of Images created.
    //so I'd like(preferably within my for loop to create the .bmp's and scale down 
    //using a const value such as const int width = 400, const int height = 300;
    //and I'd lke to save the image to a different diretory than imagePath
}

他に知りたいことがある場合は、以下の投稿をご覧ください。質問を編集します

4

1 に答える 1

0

これを試して:

int newWidth = 75;
int newHeight = 50;
for (int i = 0; i < trees.Length; i++)
{
    string d = imagePath + trees[i].latinName + ".JPG";
    Image image = Image.FromFile(d);

    //new image with size you need
    Bitmap smallImage = new Bitmap(newWidth, newHeight);
    Graphics g = Graphics.FromImage(smallImage);

    //draw scaled old image to new with correct size
    //g.drawImage(Image sourceImage, Rectangle destination, Rectangle source, GraphicsUnit gu)
    g.DrawImage(image, new Rectangle(0, 0, smallImage.Width, smallImage.Height), new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);

    //format of new image is defined by it's name (.png/.jpg)
    smallImage.Save(trees[i].latinName + "_new.png");
}
于 2013-07-07T20:07:38.160 に答える