首页 > 解决方案 > 如何在C中从上到下写入文件

问题描述

我想问是否可以从上到下写入文件?下面的当前代码将垂直翻转和成像。这使用从左到右写入文件。

另一方面,如果我在写入文件时遵循从左到右的模式,我将如何水平翻转图像时遇到问题。 注意:我在这里还有其他选择,即从上到下交换行。

谁知道也许有一种方法可以遵循垂直翻转模式。

我将不胜感激你们可以提供的任何帮助。谢谢。

 //Flip Vertically
for(y = WIDTH-1 ; y >= 0 ; y--) {
    for(x = 0 ; x < HEIGHT; x++) {

        p = (unsigned char *)datap + ((WIDTH) * y * 3) + (x * 3); 
        // output pixel
        if(fwrite(p, sizeof(char), 3, outfp) != 3) {
            cleanUpBeforeExit(infp, outfp, datap, E_FILE_WRITE_ERROR);
        }
    }
}

标签: cimage-processingflip

解决方案


请注意,您使用的术语非常模棱两可。垂直翻转,水平翻转可以理解为两种方式,就像说到文件时从上到下一样。

因此,我将给出一个一般性的答案。

假设您以通常的扫描顺序写入像素,顶行在前,左侧像素在前,即通过Image[Column + Row * Pitch]双循环寻址(外在上Row,内在上Column)。您还可以反转循环遍历顺序。

然后,您将通过写入获得左右镜像(像素水平移动)Image[(Width - 1 - Column) + Row * Pitch],并通过写入获得上下镜像(像素垂直移动)Image[Column + (Height - 1 - Row) * Pitch]

您可以结合这两种修改来实现 180° 旋转。


推荐阅读