【问题标题】:How do you shift in a 2D image in java?你如何在java中转换二维图像?
【发布时间】:2014-06-14 15:45:45
【问题描述】:

调用shift查找隐藏在图像数据中的图像,通过保存bit 7,将bit 0-6向左移动一位,并将bit 0设置为之前保存的bit 7的值。

这是什么意思??

for (int row = 0; row < height; row++) {
            for (int col = 0; col < width; col++) {
                int pixel = image[row][col];
                pixel = (pixel & 0b01111111) << 1;
                image[row][col] = pixel;

这是我目前所拥有的,它会发生变化,但是我不确定如何将位 0 ​​放入之前保存的位 7 的值。

【问题讨论】:

    标签: java arrays image multidimensional-array shift


    【解决方案1】:

    假设您有 7 位:1001110 首先你保存第 7 位:1 然后左移 0-6 位:0011100 将第 0 位设置为已保存的第 7 位:0011101

    如果您比较输入和输出,您实际上是在向左移动整个位(包括回绕)。

    我不确定问题的具体情况,但可以将您的位视为像素。 0 表示没有像素,1 表示有。通过移动位(图像的表示),您也可以移动图像。

    1001110 // 位数据 . ... // 假设这是你的图像 ... . // 移动图像

    示例代码:

    byte[] arr = {0,1,0,1,1,0,1};
    byte temp = arr[0];
    int i;
    for (i = 0; i < arr.length-1; i++) {
        arr[i] = arr[i+1];
    }
    arr[i] = temp;
    

    编辑:

    根据您的示例,如果您想将第 0 位设置为前 8 位,您可以这样做:

    int temp = (pixel&(1<<8))>>8;
    pixel = (pixel & 0b011111111) << 1;
    if (temp==1) pixel |= 0b000000001;
    

    【讨论】:

    • 我有这个 for (int row = 0; row
    • 您可以发布您的代码作为对您问题的编辑吗?如果没有格式化就很难阅读。每行也是 7 位还是 8 位?谢谢。编辑:等等,我想我误解了它。每个像素有 8 位,你有宽度 x 高度像素,对吧?
    • 好的,我相信8?所以每个像素只有 8 位有效。这些是编号为 0-7 的位。
    • 每个像素的位究竟代表什么,颜色?我想我当时并没有完全回答你的问题,因为我认为你的意思是每个位代表一个像素。
    • 不,不是颜色,是图片的该部分当前所在位置的像素。如果有意义的话。
    猜你喜欢
    • 2022-01-21
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    相关资源
    最近更新 更多