我正在尝试手动绘制从 .bmp 文件读取的像素。
该信息存储在 BMP 标头中。图像宽度(4 字节 - 0x12 到 0x15)、图像高度(4 字节 - 0x16 - 0x19)以及原始像素数据的偏移量(4 字节 - 0xa 到 0xd)。为了找到宽度和高度,我使用这个:
byte[] bytes = loadBytes("ImageFile.bmp");
imageWidth = ((bytes[0x12]) | (bytes[0x13])<<8 | (bytes[0x14])<<16 | (bytes[0x15])<<24) ;
imageHeight = ((bytes[0x16]) | (bytes[0x17])<<8 | (bytes[0x18])<<16 | (bytes[0x19])<<24) ;
offset = (bytes[0xa]) | (bytes[0xb])<<8 | (bytes[0xc])<<16 | (bytes[0xd])<<24;
size(imageWidth,imageHeight);
Run Code Online (Sandbox Code Playgroud)
之后,我得到准确的结果:imageWidth是600,imageHeight是780。
但对于较小的bmp图像,250x250,经过相同的计算,我得到2的补码的答案:imageWidth是-6,imageHeight是-6。
这种转换对我来说很奇怪,因为当我用记事本++查看十六进制数据时,我得到:
fa 00 00 00 fa 00 00 00
Run Code Online (Sandbox Code Playgroud)
这些来自 0x12 - 0x19 的字节。它们不存储为有符号值。那么我为什么这样读它们呢?
无论实际大小如何,是否有一种方法可以获取实际的无符号值?
谢谢你!
我正在尝试学习如何编程GLSL几何着色器.我的测试项目是这样的:我有N个VBO,它们正在模拟"草叶".如果没有着色器,每片草叶基本上都是一条带有20段的线条.几乎N = 10k刀片,我能够或多或少地平滑动画,这样就可以达到200,000行.
着色器采用每个线段并将其吹出到以该线段为中心的相同长度的圆柱体,因此草叶现在是具有维度的管.因此CPU中没有任何变化,但现在我正在尝试利用GPU来添加更多几何体,以便我可以遮挡刀片.圆柱体有30个截面,因此每个刀片有60个三角形,1200个三角形.
问题是,为了让它顺利进行动画,我不得不缩小到只有25个刀片.这只是30k三角形,基本上比我之前处理时没有使用着色器时的LESS几何形状.
这是在Macbook Pro,Snow Leopard,AMD Radeon HD 6750M上运行的.不知道这是不是一张好牌.
着色器代码非常简单 - 顶点着色器只有gl_Position = gl_Vertex.照明发生在几何着色器中:简单的环境,镜面和漫反射组件,基本上直接来自教程.片段着色器同样简单,只是将草色乘以从几何着色器传递的光强度.
顺便说一句,这是OpenGL的旧版本,2.1 - 所以它是GLSL 1.2,因此要使用地理着色器,它需要GL_EXT.如果是相关的.
此外,堆栈是在Java顶部的JOGL顶部的GLGraphics之上处理.如果这是一个因素,我会感到惊讶,除非它以某种方式模仿CPU上的着色器代码,但我不认为OpenGL会自动为你做这种事情.
无论如何,这些数字看起来是否合理,或者我做错了什么?我不切实际地期望地理着色器能够创造奇迹吗?
我创建了一个处理草图,它将每个点云数据帧从kinect保存到文本文件,其中文件的每一行都是kinect注册的点(或顶点).我计划将数据拉入3d程序,以便在3d空间中可视化动画并应用各种效果.问题是,当我这样做时,第一帧似乎是正确的,其余的帧似乎吐出看起来像第一个图像,加上一堆随机噪声.这是我的全部代码.它需要简单的openni才能正常工作.你可以看到评论
import SimpleOpenNI.*;
//import processing.opengl.*;
SimpleOpenNI context;
float zoomF =0.5f;
float rotX = radians(180); // by default rotate the hole scene 180deg around the x-axis,
float rotY = radians(0); // the data from openni comes upside down
int maxZ = 2000;
Vector <Object> recording = new Vector<Object>();
boolean isRecording = false;
boolean canDraw = true;
boolean mouseMode = false;
int currentFile = 0;
int depthWidth = 640; //MH - assuming this is static?
int depthHeight = 480;
int steps = …Run Code Online (Sandbox Code Playgroud) 我有一个ArrayList"列表",其中包含一个值,true.但是,当我写:
if (list.get(0)==true)
我得到错误"不兼容的操作数类型对象和布尔".是ArrayList.get()方法总是返回object?如果是这样,我怎样才能获得boolean价值?
谢谢.
所以,正如你在左上角看到的那样,有变色.这违背了隐写术的目的.
我很确定这与我在图像中隐藏文本的方式有关.我是这样做的,使用Processing:
void hide(PImage payload,PImage carrier){
if(payload.width > carrier.width){
print("Carrier can not be smaller than payload");
return;
}
for(int x = 0; x < payload.width; x++){
int payloadPixel = payload.pixels[x];
int carrierPixel = carrier.pixels[x];
carrierPixel = carrierPixel & 0xFFFFFF00;
payloadPixel = payloadPixel & 0x000000FF;
carrierPixel = carrierPixel | payloadPixel;
carrier.pixels[x] = carrierPixel;
}
carrier.updatePixels();
carrier.save("newTulips.JPG");
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能让它更好地隐藏?
在处理中如果要注册鼠标事件监听器,只需要定义一个名为"mousepressed","mousereleased"等的函数,它们"神奇地"成为事件监听器.这也发生在我正在使用的controlP5库中,其中以控制小部件命名的所有函数"神奇地"成为其事件处理程序.我想知道Java如何处理这种魔法?我在哪里可以看到有关此模式的一些源代码或主题.我想知道它的机制,因为我无法在主applet中定义监听器.
我试图将一个类作为参数传递给方法,但不知道是否可能.
而不是调用的Insertion class在所述void runTest(String[] text, int[] number, String url)方法中,可以我通过它作为一个参数,这样我可以添加其他的排序算法.
这是我到目前为止:
Insertion insertion;
void setup() {
String url = sketchPath("numbers/512/");
insertion = new Insertion();
String[] stringData = null;
int[] intData = null;
runTest(stringData, intData, url);
}
void runTest(String[] text, int[] number, String url) {
File directory = new File(url);
File[] listOfFiles = directory.listFiles();
for (File file : listOfFiles) {
//println(file.getName());
text = loadStrings(file);
number = int(text);
insertion.insertionSort(number);
}
}
class Insertion {
Insertion() {
}
int[] insertionSort(int[] …Run Code Online (Sandbox Code Playgroud) 我会保持这么简短,我正在制作一个塔式防御游戏作为一个迷你项目,而我有一些空闲时间,我正在试图弄清楚我如何能够实现塔,以便能够使用dist进入范围时拍摄的en但我只是不知道如何实现一个使用enimies位置和塔位置的方法.我有一个CreepSprites和Towers的ArrayList
CreepSprite[] CreepSprites;
ArrayList<Tower> AllTowers = new ArrayList<Tower>();
ArrayList<Creep> AllCreeps = new ArrayList<Creep>();
Run Code Online (Sandbox Code Playgroud)
如果有人可以给我一些指导,告诉我如何让塔能够拍摄那些很棒的Creeps,即使它没有摆脱它们,只要能够射击它们就会很棒.
干杯
假设我有以下输入字符串:
range (bar | thumb_1 | thumb_2 | fill)
range(bar|thumb_1|thumb_2|fill)
.root.range.bar
Run Code Online (Sandbox Code Playgroud)
然后我想要以下输出:
.range (.bar | .thumb_1 | .thumb_2 | .fill)
.range(.bar|.thumb_1|.thumb_2|.fill)
.root.range.bar
Run Code Online (Sandbox Code Playgroud)
到目前为止我有这个:
void setup() {
test("range (bar | thumb_1 | thumb_2 | fill)");
test("range(bar|thumb_1|thumb_2|fill)");
test(".root.range.bar");
}
void test(String in) {
String r = in.replaceAll("(\\w+)", "\\.$1"); // add . prefix to every word
println(r);
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果单词已经有一个点前缀,它将添加另一个.我一直在尝试各种各样的事情[^\\.].但要么它不在最后一个输入字符串上工作,要么它开始在第一个和第二个输入字符串上吃错字符.
如何正确忽略前面已有点的情况?
在文本处理任务中,要做的第一件事就是弄清楚每个单词在给定文档中出现的频率。在此任务中,您将完成一个函数,该函数返回标记化Word文档的唯一词频。
编写代码以完成count_frequencies函数。输入参数(arr)是一个字符串列表,代表一个带标记的Word文档。输入示例如下所示:
['the','dog','got','the','bone']
您的count_frequencies函数应该返回一个元组列表,其中元组中的第一个元素是arr中的唯一单词,而元组中的第二个元素是它在arr中出现的频率。返回的列表应按每个元组的第一个元素按字母顺序排序。对于上面的示例,正确的输出将是以下元组列表:
**[('bone', 1), ('dog', 1), ('got', 1), ('the', 2)]**
Run Code Online (Sandbox Code Playgroud)
下面显示了更多示例(包含解决方案):
**Input: ['we', 'came', 'we', 'saw', 'we', 'conquered']**
**Solution: [('came', 1), ('conquered', 1), ('saw', 1), ('we', 3)]**
**Input: ['a', 'square', 'is', 'a', 'rectangle']**
**Solution: [('a', 2), ('is', 1), ('rectangle', 1), ('square', 1)]**
Run Code Online (Sandbox Code Playgroud)
您可以在输入文本框中编写自己的测试用例。在这种情况下,您的测试用例应该用空格隔开,代表count_frequencies函数的输入列表。