#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
char crop_1280[1928*1080];
static void boder_1280_cropping(unsigned int w, unsigned int h, char *buf, int border_w, int border_h)
{
int j, k;
int ow = w -border_w*2;
int oh = h -border_h*2;
int out_i = 0;
int real_w, real_h;
int count;
int i;
//Y
for(j=0;j<h;j++){
for(k=0, count = 0;k < w; k++) {
if(k<border_w||k>(w-border_w-1) || j<border_h || j > (h - border_h - 1)){
} else {
count ++;
crop_1280[out_i] = buf[j*w+k];
out_i++;
}
}
}
for (i = 0; i < w * (h / 2); i++) {
/*U, Cb*/
if (i % 2 == 0) {
real_h = ( (i / 2) / (w / 2)) * 2;
real_w = ( (i / 2) % (w / 2)) * 2;
if(real_w<border_w||real_w>(w-border_w-1)||real_h<border_h || real_h>(h - border_h - 1)){
} else {
crop_1280[out_i] = buf[w * h + i];
out_i++;
}
/*V, Cr*/
} else {
real_h = ( (i / 2) / (w / 2)) * 2 + 1;
real_w = ( (i / 2) % (w / 2)) * 2;
if(real_w < border_w ||real_w > (w-border_w-1)||real_h < border_h || real_h>(h - border_h - 1)){
} else {
crop_1280[out_i] = buf[w * h + i];
out_i++;
}
}
}
}
int main(int argc, char *args[])
{
FILE *fp = fopen("0n.yuv", "rb+");
FILE *out = fopen("0n_output.yuv", "wb+");
char buf[1920*1080];
fread(buf, 1, 1280*720*3/2, fp);
boder_1280_cropping(1280, 720, buf, 50, 100);
fwrite(crop_1280, 1, 1180* 520*3/2, out);
fclose(fp);
fclose(out);
return 0;
}
这个程序裁减了1280*720的图像