jdk/src/share/native/sun/awt/image/awt_ImageRep.c
changeset 4207 a9ca0ff33862
parent 4202 20061d84dd36
child 5506 202f599c92aa
equal deleted inserted replaced
4206:8925b5c1334b 4207:a9ca0ff33862
   136 
   136 
   137     /* Release the locked arrays */
   137     /* Release the locked arrays */
   138     (*env)->ReleasePrimitiveArrayCritical(env, jlut, srcLUT,  JNI_ABORT);
   138     (*env)->ReleasePrimitiveArrayCritical(env, jlut, srcLUT,  JNI_ABORT);
   139     (*env)->ReleasePrimitiveArrayCritical(env, jpix, srcData, JNI_ABORT);
   139     (*env)->ReleasePrimitiveArrayCritical(env, jpix, srcData, JNI_ABORT);
   140     (*env)->ReleasePrimitiveArrayCritical(env, joffs, cOffs, JNI_ABORT);
   140     (*env)->ReleasePrimitiveArrayCritical(env, joffs, cOffs, JNI_ABORT);
   141     (*env)->ReleasePrimitiveArrayCritical(env, jdata, dstData, JNI_ABORT);
       
   142 
       
   143 }
       
   144 
       
   145 JNIEXPORT void JNICALL
       
   146 Java_sun_awt_image_ImageRepresentation_setBytePixels(JNIEnv *env, jclass cls,
       
   147                                                      jint x, jint y, jint w,
       
   148                                                      jint h, jbyteArray jpix,
       
   149                                                      jint off, jint scansize,
       
   150                                                      jobject jbct,
       
   151                                                      jint chanOffs)
       
   152 {
       
   153     int sStride;
       
   154     int pixelStride;
       
   155     jobject jdata;
       
   156     unsigned char *srcData;
       
   157     unsigned char *dstData;
       
   158     unsigned char *dataP;
       
   159     unsigned char *pixP;
       
   160     int i;
       
   161     int j;
       
   162 
       
   163 
       
   164     if (JNU_IsNull(env, jpix)) {
       
   165         JNU_ThrowNullPointerException(env, "NullPointerException");
       
   166         return;
       
   167     }
       
   168 
       
   169     sStride = (*env)->GetIntField(env, jbct, g_BCRscanstrID);
       
   170     pixelStride = (*env)->GetIntField(env, jbct, g_BCRpixstrID);
       
   171     jdata = (*env)->GetObjectField(env, jbct, g_BCRdataID);
       
   172 
       
   173     srcData = (unsigned char *) (*env)->GetPrimitiveArrayCritical(env, jpix,
       
   174                                                                   NULL);
       
   175     if (srcData == NULL) {
       
   176         /* out of memory error already thrown */
       
   177         return;
       
   178     }
       
   179 
       
   180     dstData = (unsigned char *) (*env)->GetPrimitiveArrayCritical(env, jdata,
       
   181                                                                   NULL);
       
   182     if (dstData == NULL) {
       
   183         /* out of memory error already thrown */
       
   184         (*env)->ReleasePrimitiveArrayCritical(env, jpix, srcData, JNI_ABORT);
       
   185         return;
       
   186     }
       
   187 
       
   188     dataP = dstData + chanOffs + y*sStride + x*pixelStride;
       
   189     pixP  = srcData + off;
       
   190     if (pixelStride == 1) {
       
   191         if (sStride == scansize && scansize == w) {
       
   192             memcpy(dataP, pixP, w*h);
       
   193         }
       
   194         else {
       
   195             for (i=0; i < h; i++) {
       
   196                 memcpy(dataP, pixP, w);
       
   197                 dataP += sStride;
       
   198                 pixP  += scansize;
       
   199             }
       
   200         }
       
   201     }
       
   202     else {
       
   203         unsigned char *ydataP = dataP;
       
   204         unsigned char *ypixP  = pixP;
       
   205 
       
   206         for (i=0; i < h; i++) {
       
   207             dataP = ydataP;
       
   208             pixP = ypixP;
       
   209             for (j=0; j < w; j++) {
       
   210                 *dataP = *pixP++;
       
   211                 dataP += pixelStride;
       
   212             }
       
   213             ydataP += sStride;
       
   214             ypixP  += scansize;
       
   215         }
       
   216     }
       
   217 
       
   218     (*env)->ReleasePrimitiveArrayCritical(env, jpix, srcData, JNI_ABORT);
       
   219     (*env)->ReleasePrimitiveArrayCritical(env, jdata, dstData, JNI_ABORT);
   141     (*env)->ReleasePrimitiveArrayCritical(env, jdata, dstData, JNI_ABORT);
   220 
   142 
   221 }
   143 }
   222 
   144 
   223 JNIEXPORT jint JNICALL
   145 JNIEXPORT jint JNICALL