逐像素编辑bmp [C ++]

时间:2015-12-11 22:42:52

标签: c++ pixel fstream bmp

我想创建一个程序来拍摄图像,并将每个像素的蓝色分量替换为0。

所以我写了这个。我在文件夹中有一个bmp图像和它的副本,作为输入文件我放入原始名称,作为输出名称,我写了副本。但是当我尝试在程序运行后打开第二个它没有正确打开。有人可以帮忙吗?

import java.util.ArrayList;

public class DFS
{

    private int cities = 1;
    private int totWeight = 0;
    private NodeList m;
    private ArrayList<String> cityNames = new ArrayList<>();

    public DFS(NodeList m)
    {

        this.m = m;

    }

    public void drive(String start)
    {

        cityNames.add(start);

        ArrayList<MapPoint> mp = m.searchAll(start);

        for(int i = 0; i < mp.size(); i++)
        {
            if(mp.get(i).getVisit() == false && mp.get(i).getBackEdge() == false && !cityNames.contains(mp.get(i).getEndPoint()))
            {
                mp.get(i).setVisit(true);
                mp.get(i).setBackEdge(true);

                String search = mp.get(i).getEndPoint();
                System.out.println("City: " + search);

                totWeight = totWeight + mp.get(i).getDistance();
                System.out.println("Total Weight: " + totWeight);

                cities = cities + 1;
                System.out.println("# of Cities: " + cities);

                System.out.println("");

                drive(search);
            }

        }        

    }

}

3 个答案:

答案 0 :(得分:2)

没有图像文件格式包含&#34;位图大小:&#34;,&#34;图像的开头:&#34;,&#34;列号:&#34;, &#34;行号:&#34;和&#34;图像大小&#34;。

即使有这样的文件格式,你也不会写#34;开始&#34;,你正在编写&#34; Beggining&#34;,这是行不通的。计算机往往非常偏向正确的拼写。

即使有这样的文件格式,它也不会与您正在阅读的文件格式相同,因为您正在读取偏移量为2的int并将其解释为某种文件大小,但是你没有在输出文件的偏移量2处写任何大小。

所以,简而言之,你必须对你正在阅读的文件格式有一个非常明确的规范,(你没有告诉过我们),你也必须遵循这个完全相同的规范书写文件。

随着时间的推移制定自己的文件格式规范将无法正常工作。

此外,在将来,请记住,在stackoverflow上,短语如&#34;它没有正常打开&#34;不被视为技术问题的有效描述。具体说明正在发生的事情。

提示:您似乎试图通过寻找单个字节并用零覆盖它们来就地编辑文件。这不会对空文件起作用。将原始文件的全部内容复制到新文件名,然后在副本上搜索并覆盖字节。

答案 1 :(得分:1)

所以我发表评论作为回答: 我不太了解BMP格式,但是......它真的包含了字符串这样的&#34;图像大小&#34;或&#34;行号:&#34;?

如果没有,请删除ofs<<"Beggining of image: "<<beg<<"\r\n";等,我认为您的意思是cout而不是ofs

答案 2 :(得分:0)

好的,所以不要读取文件来修改我只是将原始文件的全部内容复制到输出文件名并修改它。谢谢你们,谢谢迈克,我是按照你的建议做到的。