質問

私はSWTキャンバスに任意の色のピクセルをプロットするための迅速かつ簡単な方法を探しています。 これまでのところ、私はそのような何かを使用しています:

// initialization:
GC gc = new GC(canvas);

// inside the drawing loop:
Color cc = new Color(display, r, g, b);
gc.setForeground(cc);
gc.drawPoint(x, y);
cc.dispose();

これは恐ろしく恐ろしく遅いです。それはピクセルと300×300のキャンバスを埋めるために二年半ほどかかります。 私は、オフスクリーンイメージを作成し、その中にピクセルを設定して、イメージを描くことができます。これは速くなりますが、私は特にキャンバス上のピクセルによって画像のピクセルをプロットの段階的な絵画の効果を望んでます。

役に立ちましたか?

解決

あなたは徐々に300×300の領域を埋めるいくつかのオフスクリーンイメージを描くことができます。この方法は、あなたは画像が表示されますどのくらいの速を制御することができます。

他のヒント

私は何殺害され、パフォーマンスが割り当てと90,000 Colorオブジェクトを解放していることを賭けます。 SWTで、各Colorオブジェクトは、あなたがそれをdispose()しなければならない理由である、ネイティブリソースを割り当て、覚えておいてください。これは、あなたが割り当ててColorオブジェクトを配置するたびに、あなたはネイティブコードと背中にJVMから移行しなければならないことを意味ます。

あなたのループの後にオブジェクトを廃棄300×300ピクセルのループで、その後ながら

あなたのColorインスタンスをキャッシュすることはできますか?あなただけの非常に多くのオブジェクトの最大値を保持し、その後そのエントリの一部を処分しますが、これはを大幅の物事をスピードアップする必要があり、ややインテリジェントキャッシュを必要と思います。

BufferedImageオブジェクトを作成します:

BufferedImage bi = new new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);

描画ループがあなたのピクセルを設定し内部

bi.setRGB(x, y, int_rgb);
...

そして最後にバッファリングされたイメージを表示します:

g.drawImage(bi, 0, 0, null); 
あなたが遅いSetRGBは()を見つけた場合は、

、あなたは直接ビットマップデータにアクセスすることができます:

int[] raster = ((DataBufferInt)bi.getRaster().getDataBuffer()).getData();

とそれ以降

raster[y * 300 + x] = int_rgb;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top