当前位置: 首页 > 知识库问答 >
问题:

Java链表:如何在图片中添加像素

司寇正志
2023-03-14

我有一个关于在LinkedList中添加“像素”的问题。

完成方法:

>

  • public Pixel pixelAt(int zeile,int spalte)这个方法在“图片”的行/列中返回一个后面的“Pixel”。如果没有黑色“像素”,则返回NULL。

    public void printBild()为黑色像素打印一个“*”,为白色像素打印一个“-”。

    • 公共空像素(int zeile,int spalte)

    此方法应检查该行/列中是否有黑色像素。这里我可以使用方法pixelAt()。一个白色像素应该被更改为一个黑色像素,因此有一个像素被html" target="_blank">添加到链表中。如果像素已经是黑色的,则不会发生任何事情。

    在我再次调用printBild()之后,一个白色像素“_”仍然是白色的,而不是黑色的“*”。

    public class Pixel { 
    
    private int zeile; 
    private Pixel next; 
    
    public Pixel ( int zeile, Pixel p ) {
        this.zeile = zeile;
        this.next = p;
    }
    
    public int getZeile() {
        return zeile;
    }
    
    public Pixel getNext() {
        return next;
    }
    
    // Setze Verweis auf nächsten schwarzen Pixel 
    public void setNext( Pixel p) {
        next = p;
    }
    
    }
    
    
    public class Bild {
    
    private Pixel [] data;
    private int hoehe, breite;  
    
    public Bild (int hoehe, int breite) {
        this.data = new Pixel [breite];
    
        this.hoehe = hoehe;
        this.breite = breite;
    }
    
    public void setData(Pixel [] temp) {
            this.data = temp;   
    }
    
    public Pixel pixelAt(int zeile, int spalte) { 
    
        Pixel iterator = data[spalte];
        if(iterator.getZeile() == zeile) {
            return iterator;
        }
        else {
            while (iterator.getNext() != null) {
                iterator = iterator.getNext();
    
                if(iterator.getZeile() == zeile) {
                    return iterator;
                }
            }
        }
        return null;
    }
    
    
    public void printBild() { 
    
        String leer = "";
        String [] hi = new String [hoehe];
    
        for (int k = 0; k < hoehe; k++) {
            hi[k] = leer;
        }
    
        for (int i = 0; i < data.length; i++) {
    
            Pixel iterator = data[i];
    
            for (int j = 0; j < hoehe ; j++) {
    
                if (iterator == null) {
                    hi[j] += " - ";
                }
    
                else {
    
                if (iterator.getZeile() == j) {
                    hi[j] += " * ";
                    iterator = iterator.getNext();
                }
                else {
                    hi[j] += " - ";
                }
            }
            }
        }
    
        for (int q = 0; q < hi.length; q++) {
            System.out.println(hi[q]);
        }
    
    
    }
    
    public void pixelOn(int zeile, int spalte) {
    
    
    
        if (pixelAt(zeile, spalte) == null) {
            Pixel it = data[spalte];
    
            for (int i = 1; i < zeile; i++) {   
                it = it.getNext();
            }
    
            Pixel tmp = it.getNext();
            Pixel neu = new Pixel(zeile, null);
            it.setNext(neu);
            neu.setNext(tmp);
        }   
    }
    }
    
    
    
    
    public class TestBild {
    
    public static void main(String[] args) {
    
    
    Pixel a1 = new Pixel(2, null);
    
    
    Pixel b1 = new Pixel(0, null);
    
    Pixel b2 = new Pixel(1,null);
    b1.setNext(b2);
    
    Pixel b3 = new Pixel (3, null);
    b2.setNext(b3);
    
    
    Pixel c1 = new Pixel(1, null);
    
    Pixel c2 = new Pixel(2,null);
    c1.setNext(c2);
    
    
    Pixel [] temp = new Pixel [3];
    
    temp[0] = a1;
    temp[1] = b1;
    temp[2] = c1;
    
    
    Bild BW = new Bild(4,3);
    BW.setData(temp);
    
    
    BW.printBild();
    BW.pixelOn(2, 0);
    System.out.println();
    BW.printBild();
    
    
    }
    
    
    
    }
    

    谢谢你!

  • 共有1个答案

    后树
    2023-03-14

    首先,您的pixelon比您编写的更棘手。应该是这样的:

    public void pixelOn(int zeile, int spalte) {
        if (pixelAt(zeile, spalte) == null) {
            Pixel neu = new Pixel(zeile, null);
            Pixel it = data[spalte];
            if(it!=null){
                if(it.getZeile()<zeile){
                    Pixel tmp=it.getNext();
                    while(tmp!=null && tmp.getZeile()<zeile){
                        it = tmp;
                        tmp = it.getNext();
                    }
                    it.setNext(neu);
                    neu.setNext(tmp);
                }else{
                    neu.setNext(it);
                    data[spalte] = neu;
                }
            }else{
                //there is nothing in the column for now add it
                data[spalte] = neu;
            }
        }
    }
    

    第二,您的测试不是在白色位置插入。(2,0)是行2和列0。那里的元素是黑色的。

     类似资料:
    • 问题内容: 我正在使用JDeveloper在Java中设计一个表单。我是JDeveloper的新手。在JDeveloper工具中,我没有找到任何直接将图像添加到.Net之类的选项。而且我不知道如何手动添加图像以形成表单。还有其他解决方法。所以请帮我解决。 问题答案: 就这么简单: 耶!现在,您的图像是摆动组件!将其添加到框架或面板或通常执行的任何操作中!可能也需要重新粉刷,例如

    • 我刚刚开始用libGDX做原型,以了解它是如何工作的。我想实现一个网格(像象棋游戏),当我点击/触摸网格的一个盒子,这改变了它的形象。 我找到了一个很好的教程,但它只使用键盘监听器,在网络上,我找不到一个很好的例子来阐明这些机制。 我不明白的是:用什么来渲染框(目前我只使用了SpriteBatch和ShapeRenderer)以及如何检测何时哪个框被点击(我认为计算坐标不是一个好方法。我认为最好的

    • 问题内容: 我有一个性别选择列表。 码: 我想使用下拉列表中的图像作为drop-down-icon.jpeg。 我想添加一个按钮代替下拉图标。 怎么做? 问题答案: 在 Firefox中, 您可以将背景图片添加到选项中: 更好的是,您可以像这样将HTML和CSS分开 HTML CSS 在 其他浏览器中 ,唯一的方法是使用某些JS小部件库,例如 jQuery UI ,例如使用Selectable 。

    • 我是第一次开发颤振应用程序。。我在添加图像时遇到问题。我有以下问题: 在哪里创建图像文件夹? 在哪里添加资产标签pubspec.ymal? 这需要任何资产文件夹吗? 我所尝试的: 在pubspec内部。ymal: 完整文件: 错误日志: 我的主菜。dart代码: 我指的是这个教程https://flutter.io/tutorials/layout/ 此外,我想问,有没有在颤振清洁重建的工具,因为

    • 问题内容: 问题答案: 您必须向JLabel提供一个实现(即)。您可以通过方法(如您的问题)中的方法或通过构造函数来执行此操作: 我建议你阅读的Javadoc ,和。另外,您可以查看“ 如何使用标签教程 ”以获取更多信息。

    • 问题内容: 我有一个JPanel,我想向其中添加即时生成的JPEG和PNG图像。 到目前为止,我在Swing教程中看到的所有示例,特别是在Swing示例中,都使用ImageIcon。 我将这些图像生成为字节数组,它们通常比示例中使用的通用图标大,尺寸为640x480。 使用ImageIcon类在JPanel中显示该大小的图像时是否存在任何(性能或其他)问题? 什么是平常做的呢? 如何不使用Imag