コード例 #1
0
        unsafe void similaritySetsToD3DTexture(Exemplar a, int l)
        {
            // Indices
            {
                // . create texture
                m_d3dSimilaritySet = new Texture(BRenderDevice.getDevice(),
                                                 a.stack(l).getWidth(),
                                                 a.stack(l).getHeight(), 1, 0, Format.A8R8G8B8, Pool.Managed);


                // . fill in
                GraphicsStream texstream = m_d3dSimilaritySet.LockRectangle(0, LockFlags.None);
                byte *         data      = (byte *)texstream.InternalDataPointer;
                int            rectPitch = a.stack(l).getWidth() * 4;

                byte *dataI = data;// (byte*)rectI.pBits;
                int   pitch = rectPitch;
                int[] c_ki  = new int[2] {
                    2, 0
                };
                int[] c_kj = new int[2] {
                    1, 3
                };

                int kn = Math.Min(2, Globals.K_NEAREST); // TODO: extend to ohter values of K ?
                Globals.Assert(kn <= 2);
                int width = a.stack(l).getWidth();
                int exsz  = width;

                for (int j = 0; j < width; j++)
                {
                    for (int i = 0; i < width; i++)
                    {
                        int n = a.similaritySetSize(l, i, j);

                        for (int k = 0; k < kn; k++)
                        {
                            if (k < n)
                            {
                                Pair <int, int> kij = a.similarPixel(l, i, j, k);
                                int             vi  = kij.first;
                                int             vj  = kij.second;

                                //dataI[i*4+j*pitch  + c_ki[k]]=vi & 255;            // simsets as indirections
                                //dataI[i*4+j*pitch  + c_kj[k]]=vj & 255;

                                Globals.Assert(Math.Abs(vi - i) < exsz);
                                Globals.Assert(Math.Abs(vj - j) < exsz);

                                int oi = (vi - i) + 128;
                                int oj = (vj - j) + 128;

                                Globals.Assert(oi >= 0 && oi <= 255);
                                Globals.Assert(oj >= 0 && oj <= 255);

                                dataI[i * 4 + j * pitch + c_ki[k]] = (byte)(oi & 255); // simsets as offsets
                                dataI[i * 4 + j * pitch + c_kj[k]] = (byte)(oj & 255);
                            }
                            else
                            {
                                dataI[i * 4 + j * pitch + c_ki[k]] = 128;
                                dataI[i * 4 + j * pitch + c_kj[k]] = 128;
                            }
                        }
                    }
                }
                m_d3dSimilaritySet.UnlockRectangle(0);
            }
        }