C言語を初めてまだ2,3年のものです。
DXライブラリを使用して、HDD上のPNGファイルをディスプレイに表示させる方法はたいへん参考になりました。
さてPNGファイルになっている画像データをDXライブラリを使用して、ディスプレイに表示させる方法は理解できたの
ですが
※HDD上のRawデータをメモリに読み込み、画像処理したメモリ上のデータをディスプレイに表示させる事はDXライブラリ
で可能でしょうか?
下のコードは800X800pixelのRawデータをHDD上から読み込み、単純に間引いて、400X400pixelの画像に縮小して
RawデータとしてHDDに書き出すコードです。
コードの//★の部分では、縦横1/2に縮小されたRawデータがメモリpDst1上にすでに存在しております。
このメモリ上のデータをディスプレイに表示させるにはどのような手法をとればよろしいでしょうか。
1/2に縮小されたメモリ上のRaw画像データをヘッダなどを付けてPNGファイルとして一度、HDDに書き出して、再度
読み込ませれば、DXライブラリでディスプレイに表示できますが、RAWデータをPNGファイルし、HDDに一度、書き出す
という手間がかかります。
メモリ上のRawデータを直接、ディスプレイに表示させる方法があれば、是非、ご教授頂きたく、書き込みさせて頂き
ました。
以上よろしくお願いいたします。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int inwidth = 800;
int inheight = 800;
int outwidth = 400;
int outheight =400;
int x,y,i =0;
unsigned char* pSrc1;
unsigned char* pDst1;
FILE *fp1;
int main(void)
{
//入出力画像のメモリエリア確保
pSrc1= (unsigned char*)malloc(inwidth*inheight);
pDst1 = (unsigned char*)malloc(outwidth*outheight);
//Input_image Read from FILE
fp1 = fopen("InputImg.raw","rb");
if(fp1 == NULL){
printf("Input FILE Error!!\n");
getchar();
return -1;
}
fread(pSrc1,sizeof(unsigned char),inwidth*inheight,fp1);
fclose(fp1);
printf("Read Data Finish!!\n");
//Horizontal& Vertical 1/2 Decimation
i = 0;
for(y = 0 ; y <inheight ;++y){
for(x = 0 ; x <inwidth ;++x){
if((x % 2)&& (y%2) == 0){
pDst1[i]= pSrc1[y*inwidth + x];
i++;
}
}
}
printf("Finish 1/2 Reszie\n");
//★
//Outimage Write to FILE
fp1 = fopen("OutputImg.raw","wb");
if(fp1 == NULL){
printf("Output FILE Error!!\n");
getchar();
return -1;
}
fwrite(pDst1,sizeof(unsigned char),outwidth*outheight,fp1);
fclose(fp1);
free(pSrc1);
free(pDst1);
printf("Finish All proces!!s\n");
getchar();
return 0;
}