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 |