『漫游』酷论坛>『影音数码技术学习交流』>[调查]Crop&Resize方案

不败的魔术师@2006-01-13 11:23

你写吧...
引用

大虾@2006-01-13 18:07

我要是会写就不在这叫了
引用

MeteorRain@2006-01-13 20:54

引用
最初由 大虾 发布
我要是会写就不在这叫了
源代码给我一下,我看看。
msg7086 # gmail DOT com
引用

大虾@2006-01-14 08:29

一直是开源的,已经注释得很详细了:
http://www.dgwxx.cn/nmmbbs/viewthread.php?tid=273

因为HTML混杂在里面,所以读起来可能有些困难。
如果有问题请加我的MSN:dgwxx # hotmail DOT com
sswroom倒是帮我写过一个VB的版本,但是有些毛病……所以就没有放出来
引用

MeteorRain@2006-01-14 11:24

关于你的php代码,给你些建议:
1、有些地方输出的时候,像
echo "横共切:" . $k . ",纵共切:" . $l . ",AE:" . $cc . "
";
可以改用printf()来做,会比较美观可读。

2、function isodd($num)
这个函数太失败啦……
只要 $num % 2 == 1 就是奇数, $num %2 == 0 就是偶数啦……

那个我优化一下给你看看。另外,我试试看用purebasic和c++改写一下
引用

MeteorRain@2006-01-14 19:52

复制代码
  1. #include
  2. #include
  3. #include
  4. struct solution
  5. {
  6. int hcrop, vcrop;
  7. double ae, absae;
  8. };
  9. solution * sol[625];
  10. int recount = 0;
  11. void usort()
  12. {
  13. int i, j;
  14. solution * temp1;
  15. for(i = 0; i < recount - 1; i++)
  16. for(j = 0; j < recount - i - 1; j++)
  17. if(sol[j]->absae > sol[j+1]->absae)
  18. {
  19. temp1 = sol[j];
  20. sol[j] = sol[j+1];
  21. sol[j+1] = temp1;
  22. }
  23. }
  24. void freeall()
  25. {
  26. int i;
  27. for(i = 0; i < recount; i++)
  28. free(sol[recount]);
  29. recount = 0;
  30. }
  31. int main()
  32. {
  33. int mode, ar, hrev, vrev, hcrop, vcrop, srange, output, c=720, d, k, l, i;
  34. double maxae, factor2, aa, bb, cc, dd; //Ahhh~, i hate these variable names!!!
  35. char filename[200];
  36. FILE * fp;
  37. puts(" Crop & Resize Calculator @ C++");
  38. puts(" by MR, v 0.1\n");
  39. printf("制式\t\t1 - NTSC\t2 - PAL:");
  40. scanf("%d", &mode);
  41. printf("屏幕比例\t1 - 16:9\t2 - 4:3:");
  42. scanf("%d", &ar);
  43. printf("Target 横向分辨率:");
  44. scanf("%d", &hrev);
  45. printf("Target 纵向分辨率:");
  46. scanf("%d", &vrev);
  47. printf("横向最小切边(默认0):");
  48. scanf("%d", &hcrop);
  49. printf("纵向最小切边(默认0):");
  50. scanf("%d", &vcrop);
  51. printf("切边搜寻范围(建议20以内):");
  52. scanf("%d", &srange);
  53. printf("最大可接受AE(0 - 默认1.0):");
  54. scanf("%lf", &maxae);
  55. printf("输出过滤\t1 - All\t2 - Even number crop only:");
  56. scanf("%d", &output);
  57. getchar();
  58. if(maxae < 1e-6)
  59. maxae = 1.0;
  60. if(srange < 0)
  61. srange = 10;
  62. if(mode == 1)
  63. d = 480;
  64. else
  65. d = 576;
  66. if(ar == 1)
  67. factor2 = 0.75;
  68. else
  69. factor2 = 1.0;
  70. bb = (double)hrev / (double)vrev;
  71. for(k = hcrop; k < hcrop + srange; k++)
  72. {
  73. for(l = vcrop; l < vcrop + srange; l++)
  74. {
  75. // NTSC计算公式
  76. if (mode == 1)
  77. aa = ((c - k) * 72. / 79) / ((d - l) * factor2);
  78. // PAL计算公式
  79. else
  80. aa = ((c - k) * 128. / 117) / ((d - l) * factor2);
  81. cc = aa / bb - 1;
  82. dd = fabs(cc);
  83. if(dd < maxae && (output == 1 || output == 2 && k % 2 == 0 && l % 2 == 0))
  84. {
  85. sol[recount] = (solution*)malloc(sizeof(solution));
  86. sol[recount] -> hcrop = k;
  87. sol[recount] -> vcrop = l;
  88. sol[recount] -> ae = cc;
  89. sol[recount] -> absae = dd;
  90. recount++;
  91. }
  92. }
  93. }
  94. usort();
  95. printf("Write to file(ENTER to print on screen):");
  96. gets(filename);
  97. if(filename[0] != 0)
  98. {
  99. // to file
  100. fp = fopen(filename, "w");
  101. fputs("H-Crop,V-Crop,AspectError,Abs AspectError\n", fp);
  102. for(i = 0; i < recount; i++)
  103. fprintf(fp, "%d,%d,%.8lf,%.8lf\n", sol[i]->hcrop, sol[i]->vcrop, sol[i]->ae, sol[i]->absae);
  104. fclose(fp);
  105. puts("Written to file.");
  106. }
  107. else
  108. {
  109. puts("H-Crop\tV-Crop\t Aspect Error\tAbs AspectError");
  110. for(i = 0; i < recount; i++)
  111. printf("%3d\t%3d\t%12.8lf\t%13.8lf\n", sol[i]->hcrop, sol[i]->vcrop, sol[i]->ae, sol[i]->absae);
  112. }
  113. freeall();
  114. printf("Press enter key to exit...");
  115. getchar();
  116. }


C++的版本,可以用Dev-CPP附带的gcc编译器编译。
引用

雷鸣@2006-01-20 15:21

有一个AVS插件,叫AUTOCROP

Autocrop_autocrop(mode=0) 或
loadplugin("autocrop.dll")
autocrop(mode=0)
引用

vempx@2006-01-21 09:52

Interlaced YV12 转 Progressive YV12已经有损失了.....
也不在乎什么全程YV12了,差别不是很大.
引用

FalconIA@2006-01-22 01:56

看到不错的代码 眼睛一亮 收了 = 3=
引用

jiangn@2006-01-23 13:12

上面那代码是纯C嘛,哪来的"++"
引用

jiangn@2006-01-23 13:23

对不起,没看到注释是C++风格的
引用

«12»共2页

| TOP