Hix chưa nghĩ tới cái ni bao giờ.Mà mình nghĩ sao bạn không load ảnh từ ảnh bitmap nhỉ có lẽ như vậy là dễ hơn việc vẽ từng ký tự mà lại fải setpixel từng điểm
Mình đang muốn coding chương trình vẽ ký tự trong C với yêu cầu set trên từng pixel điểm ảnh của màn hình ...ai có biết hướng đi ra sao không chỉ dùm mình với..cảm ơn nhiều .
Tất cả những gì không thể mua được bằng tiền
thì
đều có thể mua được bằng rất nhiều tiền
Hix chưa nghĩ tới cái ni bao giờ.Mà mình nghĩ sao bạn không load ảnh từ ảnh bitmap nhỉ có lẽ như vậy là dễ hơn việc vẽ từng ký tự mà lại fải setpixel từng điểm
trời ơi nếu vậy thì dễ hơn rồi , nhưng ông thày giáo mình bắt phải làm như vậy đó , phải set từng pixel điểm ảnh , mà lại là vẽ ký tự mới khó chứ ...ai ơi giúp đệ với , không biết hướng giải quyết như nào , chỉ giúp ý tưởng bài này là đệ có thể làm được mà....giúp đệ đi mấy huynh , đệ cần làm bài này nghĩ mãi hông ra
Tất cả những gì không thể mua được bằng tiền
thì
đều có thể mua được bằng rất nhiều tiền
Cái này như là việc bạn làm font chữ ấy. Mỗi ký tự của bạn được đặc trưng bởi 1 mảng 2 chiều, mỗi phần tử của mảng chỉ nhận giá trị 0-1. Khi vẽ ký tự ra màn hình, bạn hãy coi màn hình với tọa độ các pixel như cái mảng 2 chiều kia. Vị chí nào trong ma trận có giá trị 1 thì pixel tương ứng trên màn hình được vẽ ra. Ví dụ về mảng 2 chiều cho chữ A:
Sau khi vẽ ra sẽ gần như:Code:0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1
Vẽ không đẹp lắm, hi vọng bạn vẽ đẹp hơn.Code:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Ý tưởng là như vậy. Khi thực hiện, vì các mảng 2 chiều kia chỉ có giá trị 0-1, vì vậy thay vì phải phải lưu cả mảng 2 chiều, bạn thấy mỗi nó như số nhị phân==> mỗi hàng hay cột trong mảng 2 chiều kia sẽ mã hóa như là 1 số nhị phân. chuyển số nhị phân này sang dạng thập phân. Vậy là từ mảng 2 chiều bạn rút gọn còn mảng 1 chiều của các số thập phân.
Ví dụ:
0 0 0 0 0 0 1 0 0 0 0 0 0 ==>64
0 0 0 0 0 1 1 1 0 0 0 0 0 ==>224
0 0 0 0 1 0 0 1 1 0 0 0 0 ==>304
0 0 0 1 1 0 0 0 1 1 0 0 0 ==>792
0 0 1 1 0 0 0 0 0 1 1 0 0 ==>1548
0 1 1 0 0 0 0 0 0 0 1 1 0 ==>3078
1 1 1 1 1 1 1 1 1 1 1 1 1 ==>8191
1 1 1 1 1 1 1 1 1 1 1 1 1 ==>8191
1 1 0 0 0 0 0 0 0 0 0 1 1 ==>6174
1 1 0 0 0 0 0 0 0 0 0 1 1 ==>6174
1 1 0 0 0 0 0 0 0 0 0 1 1 ==>6174
1 1 0 0 0 0 0 0 0 0 0 1 1 ==>6174
Cái này chính là font vetor đó. Ý tưởng là như vậy.
Đã được chỉnh sửa lần cuối bởi tuannq2367 : 11-01-2008 lúc 11:34 AM.
Ngại coding lắm rồi.
Ok ! mình đã đọc ý tưởng của tuannguyen2376 rồi .Thank bạn rất nhiều , mình đang thử code theo cách của bạn .Nếu có thắc mắc rất mong bạn giúp mình.
Cảm ơn pro nhiều nha.
Tất cả những gì không thể mua được bằng tiền
thì
đều có thể mua được bằng rất nhiều tiền
mình ko có hiểu bạn muốn nói gì lắm nhưng mà mình có thể dùng chuột vẽ các pixel theo ý thích . chắc viết chữ cũng được hỉ . ^^
không phải dùng chuột để vẽ bài này mà giả sử như này nha: Khi bạn nhấn phím "a" thì trên màn hình sẽ vẽ ra chữ a ,.v.v. nhấn phím nào sẽ vẽ chữ tương ứng.Nhưng cái khó ở bài này mình thấy là ở chỗ ta phải vẽ trên từng điểm ảnh của màn hình .Mình đang code nhưng vẫn chưa được...đang suy nghĩ
Tất cả những gì không thể mua được bằng tiền
thì
đều có thể mua được bằng rất nhiều tiền
bấm phím a thì trên màn hình sẽ vẽ ra chữ a hả . theo từng pixel hả ? bạn thử tham khảo đoạn code này của mình có đúng ý bạn ko nghe .
Để sử dụng cái nì bạn phải set mode màn hình là 640*480 nhé ( dùng int 10h set 13 ) .Code:void in_ky_tu(int x,int y,char c,unsigned char color,int transparent,unsigned char far *vb); void in_ky_tu(int x,int y,char c,unsigned char color,int transparent,unsigned char far *vb) { int offset; int i,j; unsigned char far *work_char; unsigned char bitmask; work_char=rom_char_set+c*8; offset=(y<<8)+(y<<6)+x; for(j=0;j<8;j++) { bitmask=0x80; for(i=0;i<8;i++) { if(*work_char&bitmask) vb[offset+i]=color; else if(!transparent) vb[offset+i]=0; bitmask=bitmask>>1; } offset+=320; work_char++; } }